2012-02-25 85 views
0

我在執行下面的代碼時遇到了一些「堆棧溢出」異常。 我正在製作一個「匿名內部類」。內部類異常

public class Prac_RegularInnerClass { 
    public static void main(String args[]) 
    { 
     Child1 c1=new Child1(); 
     c1.method4(); 
    } 
} 

class Parent1{ 
    public int z=10; 
    public void method1() 
    { 
     System.out.println("We are in Method 1!!!!!!!!!\n\n"); 
    } 

    public void method2() 
    { 
     System.out.println("We are in Method 2!!!!!!!!!\n\n\n"); 
    } 
} 

class Child1 extends Parent1{ 
    //Anonymous Inner class. 
    Parent1 p1=new Child1(){ 
     public void method1() 
     { 

     } 
    }; 

    public void method4() 
    { 
     p1.method1(); 
     p1.method2(); 

    } 
} 

我已經做了父類Parent1。我做了一個智力課Child1。 任何人都可以解釋嗎?

回答

1

這可能是因爲內Child1在施工階段要設置p1屬性作爲Child1本身的匿名子類,它使得新的Child1對象實例化,這使得新的Child1對象實例化,這使得新的Child1對象實例化,這使得新的Child1對象實例化,等等。

取而代之的是,在構造它們之後分配新的對象,或者分配一個不以遞歸結束的不同類型的對象。

2

因爲每次你創建的Child1實例時,它創建的Child1匿名情況下,它創建的Child1另一個匿名實例等和..

1

因爲你是在實例化Child1Child1內塊級。除了構造函數或塊之外,您應該實例化其他地方的匿名類。

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

您創建了無限循環的創建。每次你創建一個Child1,它創建在它的內部Child1,其中又包含Child1,具有Child1內,保持一個Child1 ...