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

您必须在类级别创建字段,但在 main 中实例化一次

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 回答