一、类
类常见的成员:
属性和行为(方法 或函数)
1.成员变量(属性)和局部变量
(1)成员变量
- 定义格式:数据类型 变量名 = 变量值
- 直接定义在类的一对**{}**内;
- 可以在声明属性时指明其权限,使用权限修饰符。常用权限修饰符:private、public、缺省、protected等;
- 内存加载到堆空间中(非static);
(2)局部变量
- 定义格式:数据类型 变量名 = 变量值
- 声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量;
- 不可以使用权限修饰符;
- 没有默认初始化值,故调用局部变量之前一定要显式赋值
- 内存加载到栈空间中;
2.构造器
(1)特征
- 具有与类相同的名称;
- 不声明返回值类型;
- 不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值;
(2)作用
- 创建对象;
- 给对象进行初始化;
Person p new person();//创建对象
person pe new person("sd",3);//给对象初始化
(3)构造器的创建
//测试类
public class SuccessionTwo {
public static void main(String[] args) {
//通过构造器初始化对象属性
SuccessionOne s = new SuccessionOne(19,"sdf");
}
//封装类
public class SuccessionOne {
//1.封装属性
private int age;
private String name;
//2.声明构造器
public SuccessionOne() {//构造器(一般都会创建一个无形参的构造器)
age = 18;
}
public SuccessionOne(int a,String b) {//构造器
age = a;
name = b;
}
//3.方法
void setAge(int i) {
if(i >= 0 && i <= 130) {
age = i;
return;
}
System.out.println("输入有误!");
}
}
(4)说明
- 如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器(创建对象);
- 定义构造器格式:权限修饰符 类名(形参列表){};
- 一个类中定义的多个构造器,彼此构成重载;
- 一旦我们显示的的定义了类的构造器之后,系统就不再提供默认的空参构造器;
- 一个类中,至少会有一个构造器;
3.代码块
(1)代码块的作用
用来初始化类、对象;
(2)代码块只能用static修饰
//静态代码块
static {
代码;
}
//非静态代码块
{
代码;
}
静态代码块:
- 内部可以有输出语句;
- 随着类的加载而加载,而且只执行一次;
- 作用:初始化类的信息;
- 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行;
- 静态代码块的执行要优先于非静态代码块的执行;
- 静态代码块只能调用静态的属性、静态的方法,不能调用非静态的结构;
非静态代码块:
- 内部可以有输出语句;
- 随着对象的创建而执行;
- 每创建一个对象,就执行一次非静态代码块;
- 作用:可以在创建对象时,对对象的属性等进行初始化
- 如果一个类中定义了多个非静态代码块, 则按照申声明的先后顺序执行;
- 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法;
4.方法
(1)方法的声明
权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
(1)权限修饰符
(2)返回值类型
有返回值类型:必须在方法声明时指定返回值类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量。
没用返回值类型:方法声明时,使用void表示。通常,没有返回值的方法中,就不使用return,但是,如果使用的话只能”return;“表示结束此方法的意思。
(3)形参列表
方法可以声明0个、1个或多个形参。
格式:数据类型1 形参1,数据类型2 形参2,......
(4)return关键字
使用范围:使用在方法体中;
作用:1.结束方法 2.针对于有返回值类型的方法,使用”return 数据“方法返回所要的数据;
注意:return后面不可以声明执行语句;
(2)方法的重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可;(与权限修饰符和返回值类型无关)
public class OverLoad {
public static void main(String[] args) {
OverLoad test = new OverLoad();
int sum = test.mol(8);
int mult = test.mol(1, 2);
String chars = "sfljd";
test.mol(chars);
System.out.println(sum + mult);
}
//方法的重载
public int mol(int i) {
return i*i;
}
public int mol(int a,int b) {
return a*b;
}
public void mol(String c) {
System.out.println(c);
}
}
(3)可变个数的形参
javaSE 5.0支持;
允许直接定义能和多个实参相匹配的形参。
具体使用:
- 可变个数形参格式: 数据类型 ... 变量名
- 当调用可变个数形参的方法时,传入的形参个数可以是:0个,1个,2个......
- 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
- 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载
- 可变个数形参在方法的形参中,必须声明在末尾(只能有一个可变个数形参)
public void show(int a,int c,String ... strs){
}
(4)方法形参的值传递机制
形参时基础数据类型:将实参基本数据类型变量的“数据值”传递给形参
public class ValueTransfer {
public static void main(String[] args) {
int m = 20;
int n = 3;
ValueTransfer v = new ValueTransfer();
v.swap(m, n);
System.out.println(m + "," + n);
}
public void swap(int m,int n) {
int temp = m;
m = n;
n = temp;
}
}
//结果:20,3
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
public class ValueTransferr {
public static void main(String[] args) {
Date date = new Date();
ValueTransferr v = new ValueTransferr();
v.swap(date);
System.out.println(date.m + "," + date.n);
}
public void swap(Date date) {
int temp = date.m; //date是引用数据类型,
date.m = date.n;
date.n = temp;
}
}
class Date{
int m = 30;
int n = 3;
}
二、对象
1.创建对象
类名 对象名 = new 类名();
2.匿名对象
理解:创建对象时,只有创建对象的语句,却没有显示地赋值给一个变量;
特征:
- 调用几次匿名对象就创建了几个对象,造成空间的浪费;
- 匿名对象可以作为方法的参数和返回值;
new Get().fangFa();
new Get().zhi = 209;