Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内部类异常_Java - Fatal编程技术网

Java 内部类异常

Java 内部类异常,java,Java,在执行下面的代码时,我遇到了一些“堆栈溢出”异常。 我正在制作一个“匿名内部类” 我已将父类设置为Parent1。我生了一个智利班的孩子。 有人能解释一下吗?因为每次创建Child1的实例时,它都会创建一个Child1的匿名实例,这会创建另一个Child1的匿名实例,依此类推。因为每次创建Child1的实例时,它创建一个Child1的匿名实例,这将创建另一个Child1的匿名实例,依此类推。,因为您在Child1的块级别实例化Child1类。您应该在构造函数或块之外的其他地方实例化匿名类 cla

在执行下面的代码时,我遇到了一些“堆栈溢出”异常。 我正在制作一个“匿名内部类”

我已将父类设置为Parent1。我生了一个智利班的孩子。
有人能解释一下吗?

因为每次创建
Child1
的实例时,它都会创建一个
Child1
的匿名实例,这会创建另一个
Child1
的匿名实例,依此类推。

因为每次创建
Child1
的实例时,它创建一个
Child1
的匿名实例,这将创建另一个
Child1
的匿名实例,依此类推。

,因为您在
Child1
的块级别实例化
Child1
类。您应该在构造函数或块之外的其他地方实例化匿名类

class Child1 extends Parent1{
    Parent1 p1;
    public void method4(){
       if(p1==null){
         p1=new Child1(){
           public void method1(){}
         };
        }
        p1.method1();
        p1.method2();
    }
}

因为您正在块级别的
Child1
中实例化
Child1
类。您应该在构造函数或块之外的其他地方实例化匿名类

class Child1 extends Parent1{
    Parent1 p1;
    public void method4(){
       if(p1==null){
         p1=new Child1(){
           public void method1(){}
         };
        }
        p1.method1();
        p1.method2();
    }
}

你创造了一个无限的创造循环。每次你创建一个
Child1
,它就会在里面创建一个内部
Child1
,它又包含一个
Child1
,里面有一个
Child1
,里面有一个
Child1

你已经创建了一个无限的创建循环。每次创建
Child1
时,它都会在其中创建一个内部
Child1
,该内部包含一个
Child1
,该内部包含一个
Child1
,它包含一个
Child1
..

,这可能是因为在构造阶段的Child1中,您正在将p1属性设置为Child1本身的匿名子类,这将使新的Child1对象实例化,这将使新的Child1对象实例化,这将使新的Child1对象实例化,这将使新的Child1对象实例化,以此类推


相反,在构造新对象后分配新对象,或者分配不同类型的对象,而不是以递归结束。

这可能是因为在构造阶段的Child1中,您正在将p1属性设置为Child1本身的匿名子类,从而使新的Child1对象实例化,这使得一个新的Child1对象实例化,这使得一个新的Child1对象实例化,这使得一个新的Child1对象实例化,依此类推

相反,可以在构造新对象后分配它们,或者分配一个不同类型的对象,而不是以递归结束