Java教程

匿名内部类成员变量初始化导致 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对象里的匿名内部类,该内部类又创建了自己的内部类,导致无限递归。


解决方案:

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

这篇关于匿名内部类成员变量初始化导致 java.lang.StackOverflowError的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!