2014-05-25 93 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

所以它不可能寫在單個類文件 –