这个问题似乎很简单,下面的代码好像就可以
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.StackOverflowError 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()一直执行。
如何解决这个问题呢?我想到了单例模式,不知道还有什么方法?