我们知道,Java的执行顺序是:
1、父类的静态成员和静态块
2、子类的静态成员和静态块
3、父类的成员赋值和构造块
4、父类的构造方法
5、子类的成员赋值和构造块
6、子类的构造方法
我们在编程时有事会这么写,就是在成员变量中声明并初始化本类的实例引用。如:
clsaa Father{
public static Father fa=new Father();
}
一般我们定义为静态这没什么问题。因为静态只在类加载时,赋值一次。
但是如果我们把他定以为实例变量会怎么样呢?
答案是:java.lang.StackOverflowError
因为实例成员在实例时,总会被赋值一次,而这个赋值却又是new另一个实例,就会产生无限的递归,直至报错。