为什么我不能在没有main方法的情况下实例化和创建Object?(堆栈溢出错误)

Jp *_*ddy 1 java

我的代码:

(导致堆栈溢出错误)

public class Overloads {
    String uniqueID;    
    Overloads ov2=new Overloads();

    public static void main(String[] args) {
        System.out.println("IN MAIN");
    }

    public void setUniqueID(String theID) {
        // II lots of validation code, and then:
        uniqueID = theID;
        System.out.println(uniqueID);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码工作正常:

public class Overloads {
    String uniqueID;   

    public static void main(String[] args) {
          Overloads ov2=new Overloads();
          System.out.println("IN MAIN");
    }

    public void setUniqueID(String theID) {
        // II lots of validation code, and then:
        uniqueID = theID;
        System.out.println(uniqueID);           
    }
}
Run Code Online (Sandbox Code Playgroud)

Zav*_*ior 12

主要方法的存在与此无关.但是,声明变量的范围非常重要.

您是否了解了代码的第一个版本中发生的情况?

Create new instance of Overloads
  -> ov2 = Create new instance of Overloads
      -> ov2 = Create new instance of Overloads
         -> ov2 = Create new instance of Overloads
Run Code Online (Sandbox Code Playgroud)

等等.变量ov2在类的范围内,因此只要实例化类的实例,它就会被初始化.这将永远不会终止,直到你的内存不足并导致堆栈溢出.使用调试器运行它以获得更清晰的视图.

代码的第二个版本仅Overloads在main方法的范围内实例化一个实例.因此,创建一个实例不会导致新创建的实例创建新实例,依此类推.