构造方法
简介
构造器。是类的一种特殊的方法,它的主要作用是完成对新对象的初始化,它有以下特点:1. 方法名和类名相同。 2. 没有返回值。 3. 在创建对象时,系统会自动调用该类的构造器完成对象的初始化。
使用细节
1. 一个类可以定义多个不同的构造器,即构造器重载,系统根据参数不同调用不同的构造器。
2. 构造器名与类名相同,且没有返回值。
3. 构造器是完成对象的初始化,并不是构造对象。
4. 不能自己主动调用构造器,在创建对象时系统自动调用。
5. 如果没有定义构造器,系统会自动给类生成一个默认的无参构造器(也叫默认构造器),比如Person(){},使用 javap指令,可以反编译查看。直接javap + 类名 即可。
class Person {
}
6. 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,如果还想使用,那必须使用重载的方法,自己再定义一下。
对象创建流程
class Person {
int age = 90;
String name;
Person(String n, int a) {
name = n;
age = a;
}
}
//主函数
Person p = new Person("小王",20);
1. 加载Person类信息,只会加载一次。
2. 在堆中分配空间(地址)。
3. 完成对象初始化——(1)默认初始化,age = 0,name = null。(2)显式初始化,age = 90,name = null。(3)构造器的初始化,age = 20,name = 小王。
4. 把对象在堆中的地址,返回给p(p是对象名,也可以理解成是对象的引用)。
this
1. 图示
Dog dog1 = new Dog("大壮",3);
Dog dog2 = new Dog("大黄",2);
简单地说,哪个对象调用this,this就代表哪个对象。
2. 使用细节
1. this关键字可以用来访问本类的属性、方法、构造器。
2. this可以用于区分当前类的属性和局部变量(起到一个定位作用)。
class Person {
String name = "milan";
public void showName() {
String name = "shang";
System.out.println(name); //输出局部变量 "shang" (就近原则)
System.out.println(this.name); //输出属性 "milan"
}
}
3. 访问成员方法的语法:this.方法名(参数列表); (在方法中访问)。
4. 访问构造器语法:this(参数列表),注意只能在一个构造器中访问另一个构造器,并且必须放在第一句中。
class Person {
Person() {
this("wang"); //调用另一个构造器
}
Person(String name) {
this.name = name;
}
}
Person() {
System.out.println("不放在第一句");
this("wang");
}
5. this不能在类定义的外部使用,只能在类定义的方法中使用。
public static void main(String[] args) {
Person a = new Person();
this.name; //在主函数中调用this
}