public class Main extends A{ private String s = "hello"; public Main(){ hello(); } public void hello(){ System.out.println("s "+s); } public static void main(String[] args) { new Main(); } } class A{ private String s2 = "world"; public A(){ hello(); System.out.println(this); } public void hello(){ System.out.println("s2 "+s2); } }
结果 s null com.briup.Main@15db9742 s hello
解析:
初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;