public class TestStatic { Person person = new Person("Test"); static{ System.out.println("test static"); } public TestStatic() { System.out.println("test constructor"); } public static void main(String[] args) { new MyClass(); } } class Person{ static{ System.out.println("person static"); } public Person(String str) { System.out.println("person "+str); } } class MyClass extends TestStatic { Person person = new Person("MyClass"); static{ System.out.println("myclass static"); } public MyClass() { System.out.println("myclass constructor"); } }
----------------------------------------------------------------------------------------------------
test static
myclass static
person static
person Test
test constructor
person MyClass
myclass constructor
1.运行main方法,首先执行main所在类TestStatic 的static代码块 test static
2.main中new MyClass()类,加载MyClass类,首先执行MyClass类的static代码块 myclass static
3.MyClass类继承了TestStatic,所以要先加载父类静态代码块,因为TestStatic的static代码块已经被执行过了
4.然后再执TestStatic的成员变量,person = new Person("Test"),先加载Person类的静态代码块 person static
5.然后加载Person类的构造方法new Person("Test"), person Test
6.再加载TestStatic自己的构造方法 test constructor
6.然后初始化MyClass自己的成员变量 person=new Person("MyClass"),加载构造Person类的构造器 person MyClass