目录

this 的用法

目录

陈述

this创建好的对象的地址

而一个对象的创建(含有继承的情况),是先静态后实例,父在子前

  1. 父类静态变量、静态语句块
  2. 子类静态变量、静态语句块
  3. 父类实例变量、普通语句块
  4. 父类构造方法
  5. 子类实例变量、普通语句块
  6. 子类构造方法

静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序

可以看到,在构造方法执行之前,对象的内存空间已经分配好了,该初始化的变量都初始化了,该执行的语句块都执行了,已经有对象的地址可用了,所以在构造方法里面也可以用 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