Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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_Stack Overflow_Inner Classes_Anonymous Class - Fatal编程技术网

Java 匿名内部类示例中的异常

Java 匿名内部类示例中的异常,java,stack-overflow,inner-classes,anonymous-class,Java,Stack Overflow,Inner Classes,Anonymous Class,当运行上述代码时,我得到: public class outer { void meth(){ System.out.println("outer"); } outer y = new outer(){ void meth(){ System.out.println("anonymous"); } }; public static void main(String[] args)

当运行上述代码时,我得到:

public class outer {
    void meth(){
        System.out.println("outer");
    }

    outer y = new outer(){
        void meth(){
            System.out.println("anonymous");
        }
    };

    public static void main(String[] args) {
        outer a = new outer();
        a.meth();
    }
}
线程“main”java.lang.StackOverflowerr中出现异常 我试图在单个类中执行匿名内部类;可能吗?
出现此异常的原因是什么?

当构造一个新的
outer
时,必须初始化字段
y
,但这包括创建另一个
outer
(或者是
outer
的匿名子类)。这将无限期地继续并导致堆栈溢出

请注意,错误发生在
主文件的第一行
a.meth()
甚至从未接触过


您可以通过在创建时不让
外部
尝试实例化自身来修复代码(例如,您可以使
y
静态
):

外面的 匿名的
请注意,我假设了一个更为传统的命名方案(即
Outer
而不是
Outer
)。

当构建一个新的
Outer
时,必须初始化字段
y
,但这包括创建另一个
Outer
(或者更确切地说,是
Outer
的匿名子类)。这将无限期地继续并导致堆栈溢出

请注意,错误发生在
主文件的第一行
a.meth()
甚至从未接触过


您可以通过在创建时不让
外部
尝试实例化自身来修复代码(例如,您可以使
y
静态
):

外面的 匿名的
请注意,我假设了一个更为传统的命名方案(即
Outer
而不是
Outer
)。

@hexafraction异常位于线程“main”java.lang中。StackOverflowError@hexafraction线程“main”java.lang.StackOverflowerErrors中出现异常,因此无法在单个类中编写相同的线程file@saurabhkumar你可以(虽然从逻辑上讲,您可能应该分离出
main
)。重要的是使
y
成为静态。我已经再次编辑过。静态使outer只创建一次对象?这就是stackoverflow异常消失的原因,对吗?@saurabhkumar看到这一点:。对不起,outer前面的static y=new outer()也就是说,我们可以在不创建对象的情况下调用它。我现在是吗?所以不可能在单个类中编写相同的代码file@saurabhkumar您可以(尽管从逻辑上讲,您可能应该将
main
分开)。重要的是使
y
static。我又编辑了一次。static使outer只创建了一次对象?这就是stackoverflow异常消失的原因,对吗?@saurabhkumar看到了:。对不起,outer前面的static y=new outer()意味着,我们可以在不创建对象的情况下调用它。我现在是吗? Exception in thread "main" java.lang.StackOverflowError
public class Outer {
    void meth(){
        System.out.println("outer");
    }

    static Outer y = new Outer(){
        void meth(){
            System.out.println("anonymous");
        }
    };

    public static void main(String[] args) {
        Outer a = new Outer();
        a.meth();
        y.meth();
    }
}
outer anonymous