请忽略我的傲慢......这几天学习java,我遇到了这个问题完全相同的问题:为什么我不能在没有main方法的情况下实例化和创建Object?(堆栈溢出错误)也
期待可能的downvote ...但请一次通过我的问题!!!!
我正在尝试的代码:
public class Arrayprg{
Arrayprg ag = new Arrayprg(); //ignore this for a while and go thru code please
public static void main(String []args){
System.out.println("Hello Array");
new Arrayprg().declarearray();
}
public void declarearray()
{
int[] arr;
arr = new int[11];
new Arrayprg().assignarr(arr);
}
public void assignarr(int arr[])
{
int i;
for(i = 0; i < 11; i++)
{
arr[i] = i;
}
new Arrayprg().printarr(arr);
}
public void printarr(int arr[])
{
int i;
for(i = 0; i < 11; i++)
{
System.out.println(arr[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
从逻辑上思考,通过代码,你会看到很多new arrayprg()....我想到的是instantiate outside of methods并在之后通过它调用所有方法,但我想这在java中是不允许的.
是什么导致我的问题
通过引用问题解决方案,因为它解释了下面的事情发生:
Create new instance of Arrayprg
-> ag = Create new instance of Arrayprg
-> ag = Create new instance of Arrayprg
-> ag = Create new instance of Arrayprg
Run Code Online (Sandbox Code Playgroud)
在该问题中给出的解释
.....只要实例化类的实例,它就被初始化.这将永远不会终止,直到你的内存不足并导致堆栈溢出.使用调试器运行它以获得更清晰的视图.
我的问题
所以我Arrayprg ag = new Arrayprg();在我的程序中创建了一个循环,每次我创建一个实例,但为什么在我调用函数时调用new Arrayprg().
我的意思是当我通过new Arrayprg()方法内部调用函数时为什么会Arrayprg ag = new Arrayprg();得到为Stackoverflow调用并创建错误循环?????
这将导致StackOverflowError.
有趣的是,你告诉我们忽略的那条线是罪魁祸首.当你实例化一个new时,会Arrayprg调用任何对象初始化器,包括 new Arrayprg()然后递归尝试继续调用构造函数而不是结束.删除该行,或将其放在静态初始化程序中.更好的是,只是不要Arrayprg在main方法之外创建,因为你的Arrayprg不需要Arrayprg本身的实例,
我会更清楚,但我不知道你想要实现什么.