为什么我不能在java中的任何方法之外实例化?

Noo*_*tor 1 java

请忽略我的傲慢......这几天学习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调用并创建错误循环?????

ζ--*_*ζ-- 5

导致StackOverflowError.

有趣的是,你告诉我们忽略的那条线是罪魁祸首.当你实例化一个new时,会Arrayprg调用任何对象初始化器,包括 new Arrayprg()然后递归尝试继续调用构造函数而不是结束.删除该行,或将其放在静态初始化程序中.更好的是,只是不要Arrayprg在main方法之外创建,因为你的Arrayprg不需要Arrayprg本身的实例,

我会更清楚,但我不知道你想要实现什么.