这个问题似乎很简单,下面的代码好像就可以

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()一直执行。

如何解决这个问题呢?我想到了单例模式,不知道还有什么方法?

相关文章:

  • 2022-12-23
  • 2021-08-01
  • 2022-12-23
  • 2021-03-26
  • 2022-12-23
  • 2019-03-13
  • 2021-10-14
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-17
  • 2021-08-09
  • 2021-08-19
  • 2021-09-12
  • 2021-09-10
  • 2021-09-28
相关资源
相似解决方案