Wilson

自强不息 厚德载物

Java类初始化顺序

  • Print.java
    public class Print {
     public Print (String print) {
    System.out.println(print);
     }
    }
    
  • Person.java
    ````
    public class Person {

private static Print printLog = new Print(“父类静态实例1–>”);
private Print log = new Print(“父类实例–>”);
static {
Print printLog = new Print(“父类静态块–>”);
}
private static Print print = new Print(“父类静态实例2–>”);
public Person(){
new Print(“父类构造方法–>”);
}

public static void print() {
Print printLog = new Print(“父类静态方法–>”);
}
private static Print printLog3 = new Print(“父类静态实例3–>”);
}

- Child.java

public class Child extends Person {

private static Print printLog = new Print(“子类静态实例1–>”);
private Print log = new Print(“子类实例–>”);
static {
Print printLog = new Print(“子类静态块–>”);
}
private static Print print = new Print(“子类静态实例2–>”);

public Child() {
new Print(“子类构造方法–>”);
}

public static void print() {
Print printLog = new Print(“子类静态方法–>”);
}

private static Print printLog3 = new Print(“子类静态实例3–>”);

public static void main(String[] args) {
new Child();
}
}

- 输出结果

父类静态实例1–>
父类静态块–>
父类静态实例2–>
父类静态实例3–>
子类静态实例1–>
子类静态块–>
子类静态实例2–>
子类静态实例3–>
父类实例–>
父类构造方法–>
子类实例–>
子类构造方法–>

````
->很显然,子类初始化的过程:

  • 父类静态实例或者父类静态代码块,代码的放置先后顺序,决定它们执行先后
  • 子类静态实例或者子类静态代码块
  • 父类实例
  • 父类构造方法
  • 子类实例
  • 子类构造方法
  • 那为什么了?后面研究下再跟进

Comments