class Base
{
public Base()
{
test();
}
public void test()
{
System.out.println("111");
}
}
public class Sub extends Base
{
private String name;
public void test()
{
System.out.println(name.length());
}
public static void main(String arg[])
{
Sub s = new Sub();
}
}
先调用base的构造函数,然后调用Sub的test的时候,name是空指针,异常。
java初始化顺序:
父类静态初始化块->子类静态初始化块.....->父类初始化块->父类构造器->子类初始化块->子类构造器........->父类初始化块->父类构造器->子类初始化块->子类构造器........