编程语言
首页 > 编程语言> > 匿名内部类成员变量初始化导致 java.lang.StackOverflowError

匿名内部类成员变量初始化导致 java.lang.StackOverflowError

作者:互联网

项目场景:

java某抽象类A中需要匿名初始化一个同类型的成员变量,

public class Main {
  public static void main(String[] args) {
    new B();
  }

}

abstract class A {
   A a = new A() {//同类型成员变量
     @Override
     void do_sth() {
       System.out.println("do nothing");
     }
   };
  abstract void do_sth();
}

class B extends A{

  @Override
  void do_sth() {
	System.out.println("doing B");
  }
}

问题描述:

java.lang.StackOverflowError 直接栈溢出了


原因分析:

创建B对象时,也创建了A对象里的匿名内部类,该内部类又创建了自己的内部类,导致无限递归。


解决方案:

尽量不要用匿名内部类作为成员变量,如果要用,一定注意是否包含无限递归的可能。

标签:lang,do,java,StackOverflowError,sth,class,匿名,void
来源: https://blog.csdn.net/monk0271_chen/article/details/120919305