this 的用法
目录
陈述
this
是创建好的对象的地址。
而一个对象的创建(含有继承的情况),是先静态后实例,父在子前:
- 父类静态变量、静态语句块
- 子类静态变量、静态语句块
- 父类实例变量、普通语句块
- 父类构造方法
- 子类实例变量、普通语句块
- 子类构造方法
静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。
可以看到,在构造方法执行之前,对象的内存空间已经分配好了,该初始化的变量都初始化了,该执行的语句块都执行了,已经有对象的地址可用了,所以在构造方法里面也可以用 this
表示当前对象。
this
主要用于:
- 程序产生二义性的地方,用
this
指明当前对象 - 调用重载的构造方法,必须位于构造方法的第一句
注意 this
显然不能用于 static
修饰的方法中 。
验证
public class ThisTest {
public static void main(String[] args) {
Child c = new Child("Yuhan", 25);
}
}
class Father {
{
System.out.println("Father Instance.");
}
private String occupation = "Doctor";
{
System.out.println("Father Occupation: " + occupation);
}
static {
System.out.println("Father Static Block.");
}
public String name;
public Integer age;
public Father() {
System.out.println("Father Constructed.");
}
}
class Child extends Father {
public Child() {
name = "Child";
age = 13;
}
static {
System.out.println("Child Static Block.");
}
public Child(String name) {
this();
System.out.println("Child Name: " + name);
this.name = name;
}
public Child(String name, Integer age) {
this(name);
System.out.println("Child Age: " + age);
this.age = age;
}
{
System.out.println("name:" + name + " age:" + age);
}
}
输出:
Father Static Block.
Child Static Block.
Father Instance.
Father Occupation: Doctor
Father Constructed.
name:null age:null
Child Name: Yuhan
Child Age: 25