构造代码块
一个class里面出现一个大括号里面包含一些代码的东西,我们称之为构造代码块 , 构造代码块是先于构造函数执行的,用来初始化对象共有的内容。而构造函数是用来给相应的对象初始化的。
class Person{
private int age;
private String name;
{
System.out.println("crying...");
}
Person(){}
Person(int age, String name){
this.age = age;
this.name = name;
}
}
public class PersonDemo{
public static void main(String[] args){
Person wangwu = new Person();
Person lisi = new Person(20, lisi);
}
}
main函数执行完之后,控制台打印两句crying…,原因就是因为构造代码块 是用来给对象共性初始化的,而构造代码块 是给对应的对象初始化的(上面例子中wangwu
和lisi
用的构造函数是不相同的,各自有自己对应的构造函数
this关键字的用法
- 为了防止局部变量和成员变量赋值的时候,同名引起的局部变量将成员变量覆盖掉的。引入了this关键字
class Person{
private int age;
Person(int age){
this.age = age;
}
}
- this后面直接接一对括号,我们称之为this语句,只用于构造函数之间的相互调用,并且只允许放在第一行使用
class Person{
private int age;
private String name;
Person(int age){
this.age = age;
}
Person(int age, String name){
this(age);
this.name = name;
}
}
这里的this(age)
就相当于调用了Person(int age){}
.放在第一行的原因就是应该想让人家之前的所有初始化结束了,在执行最新的初始化操作,这样子就不会最新的操作被原来的初始化覆盖(如果Person后面还有一句this.name = "hahahahah"
,这样子如果this语句放在了this.name = name
, 后面就会发生最后name的值时”hahahahah”)。
所以记住这个原则,this 语句出现在构造函数之间相互调用,但是出现的位置必须时第一行