这个问题似乎很简单,下面的代码好像就可以
package test;
public class B {
B b = new B();
static {
System.out.println("类初始化块");
}
{
System.out.println("实例初始化块");
}
public B(){
System.out.println("对象初始化");
}
public static void main(String[] args) {
new B();
}
}
当你运行之后,你会发现一下异常:
类初始化块
Exception in thread "main" java.lang.*Error
at test.B.<init>(B.java:15)
at test.B.<init>(B.java:5)
at test.B.<init>(B.java:5)
at test.B.<init>(B.java:5)
......
很明显这是一个递归没有边界导致的异常,执行main方法new B()时B b= new B()执行,导致B b = new B()一直执行。
如何解决这个问题呢?我想到了单例模式,不知道还有什么方法?