以下java程序中的stackoverflow错误

use*_*089 3 java

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;  
    }  
}
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码会出现以下错误?我只是想知道原因,因为StackOverFlowError在这种情况下很难预料到错误.

Exception in thread "main" java.lang.StackOverflowError
at com.testing.<init>(testing.java:4)
at com.testing.<init>(testing.java:4)
Run Code Online (Sandbox Code Playgroud)

Jig*_*shi 13

你是递归创建的实例 testing

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

}
Run Code Online (Sandbox Code Playgroud)

在创建第一个实例时,它将创建新的实例,通过testing t=new testing();该实例将再次创建新实例,依此类推

  • @ user980089发生的事情是你实例化一个`testing`对象,第一件事就是这个对象运行它的所有字段初始值设定项.在你的情况下,唯一的初始化程序是`测试t = new testing()`,以便运行.嗯,这是做什么的?它实例化一个`testing`对象,这意味着它的所有字段都被初始化 - 即_its_`test t = new testing()`.等等.但是没有第一次`new testing()`来启动它们,它们都没有运行 - 因为`testing t`是一个实例变量,而不是静态变量,因此只适用于新实例. (2认同)