2014-05-25 97 views
1
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(); 
    } 
} 

当上述代码运行我得到:异常在匿名内部类例如

 
Exception in thread "main" java.lang.StackOverflowError 

我试图在一个单一的类来执行匿名内部类;那可能吗? 这个例外的原因是什么?

+0

@hexafraction线程“main”中的异常java.lang.StackOverflowError –

回答

4

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

请注意,错误发生在main的第一行;甚至从来没有达到过a.meth()


你可以不必Outer试图实例本身在创建修复代码(可以,例如,使ystatic):

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 

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

+0

那么我该如何纠正代码? –

+0

@saurabhkumar请参阅编辑。 – arshajii

+0

所以它不可能写在单个类文件 –