什么时候可以在该类的方法中创建该类的对象?

新手上路,请多包涵
public class TestClass(){
    public static void main(String []args) {
        TestClass t1 = new TestClass();
        t1.anything();
    }
}

在同一个类的定义中创建一个对象不奇怪吗?因为然后作为响应——这个对象创建一个新对象,然后这个新对象创建另一个对象,无限循环开始永不结束,直到内存已满。

原文由 Ravi Kumar Mistry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 307
2 个回答

在同一个类的定义中创建一个对象而不是作为响应对象创建一个新对象然后这个新对象创建另一个对象并开始无限循环并不奇怪

不,主要方法只在您运行程序时运行一次。它不会再次执行。因此,该对象只会被创建一次。

想想你的主要方法是在你的课堂之外。这会创建您的类的一个实例,并使用创建的实例。因此,当您从 main 方法创建实例时,将调用构造函数来初始化实例的状态,然后当构造函数返回时,将执行 main 方法的下一条语句。

实际上,您可以考虑 main 方法不要成为类实例状态的一部分。

但是,如果您在构造函数(比如 0-arg)中创建了类的实例,并将引用作为实例引用变量,那么这将变成无限递归。

 public class A {
    private A obj;
    public A() {
        obj = new A();  // This will become recursive creation of object.
                        // Thus resulting in StackOverflow
    }
}

原文由 Rohit Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您尝试执行以下操作,您只会遇到无限循环(堆栈溢出错误):

 public class TestClass {
    public TestClass() {
        TestClass t = new TestClass();
    }
}

在其他地方,您尝试创建类 TestClass 的对象。

原文由 adarshr 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题