3
public class testing {    
    testing t=new testing();                

    public static void main(String args[]){   
        testing t1=new testing();  
        t1.fun();  
    }

    void fun(){         
        int a=2;        
        int b=t.fun2(a);  
        System.out.println(a+" "+b);  
    }

    int fun2(int a)  
    {
        a=3;  
        return a;  
    }  
}

上記のコードで次のエラーが発生するのはなぜですか? StackOverFlowErrorこの場合、エラーを期待するのは難しいので、理由を知りたいだけです。

Exception in thread "main" java.lang.StackOverflowError
at com.testing.<init>(testing.java:4)
at com.testing.<init>(testing.java:4)
4

3 に答える 3

13

のインスタンスを再帰的に作成していますtesting

public class testing {    
 testing t=new testing();        
//

}

最初のインスタンスを作成するときに、新しいインスタンスが作成されます。これにより、新しいインスタンスtesting t=new testing();が再度作成されます。

于 2012-06-27T05:32:13.510 に答える
1

この解決策を試して、

public class testing {                

    public static void main(String args[]){   
        testing t1=new testing();  
        t1.fun(t1);  
    }

    void fun(testing t1){         
        int a=2;        
        int b=t1.fun2(a);  
        System.out.println(a+" "+b);  
    }

    int fun2(int a)  
    {
        a=3;  
        return a;  
    }  
}
于 2012-06-27T05:42:36.800 に答える
1

クラスレベルでフィールドを作成する必要がありますが、メインのどこで一度インスタンス化する必要があります

public class Testing {    
    static Testing t1;              

    public static void main(String args[]){   
        t1=new Testing();  
        t1.fun();  
    }

    void fun(){         
        int a=2;        
        int b=t1.fun2(a);  
        System.out.println(a+" "+b);  
    }

    int fun2(int a)  
    {
        a=3;  
        return a;  
    }  
}
于 2012-06-27T05:43:15.973 に答える