java - 在类本身中创建一个实例

标签 java instantiation

第4行执行赋值语句时发生了什么,编译器是否忽略new运算符并保持foo变量为null或发生了其他事情来处理这个尴尬的时刻?


public class Foo {
 // creating an instance before its constructor has been invoked, suppose the "initializing"  
 // gets printed in constructor as a result of the next line, of course it will not print it
    private  Foo foo = new Foo();//Line 4

    public Foo() {
        System.out.println("initializing");
    }
}

最佳答案

编译器在这里没有做任何特别的事情。它可能会警告您这行不通,但这很难确定。

您将收到 StackOverflowError。

public class Foo {
    private  Foo foo = new Foo();//Line 4

    public Foo() {
        System.out.println("initializing");
    }

    public static void main(String... args) {
        Foo foo = new Foo();
    }
}

打印

Exception in thread "main" java.lang.StackOverflowError
    at Foo.<init>(Foo.java:9)
    at Foo.<init>(Foo.java:7)
    at Foo.<init>(Foo.java:7)
    .. many deleted ...
    at Foo.<init>(Foo.java:7)
    at Foo.<init>(Foo.java:7)

关于java - 在类本身中创建一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191995/

相关文章:

java - 使用一个 spring security 保护两个独立的 java 应用程序

c# - 创建参数化通用对象的实例,并将所有参数设置为 null

c++ - 为什么这个循环模板实例化是合法的?

java - "Class.forName()"和 "Class.forName().newInstance()"有什么区别?

java - 为什么在某些情况下不需要对象实例化?

java - 删除整个 JTable

java - 使用 Java native 代码或 C++(QT、WxWidgets 等)进行独立于平台的编程

java - Java中的 'scope'是什么?

java - hasNextInt 无法解决线程 "main"java.util.NoSuchElementException 中的异常

javascript - Flexslider和Fancybox可以在同一个页面使用吗?