首先列出实例化的顺序
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块,如:构造,方法
- 子类非静态变量
- 子类非静态代码块,如:构造,方法
具体大家可以自行通过代码进行验证。
在实例化的时候,可能会出现成员变量实例化类,那么成员实例化。假造到public Father father = new Father()时,在去初始化Father这类的public Father father = new Father();就很容易编程死循环。而如果是静态变量,他就只会执行一次,就不会有这个困扰。
通常在成员变量初始化的话,单例用的比较多
class Father {
public Father father = new Father();
}
public class Test extends Father {
public static void main(String[] args) throws Exception {
new Father();
}
}