首页 > 解决方案 > 定义包含 main() 方法的同一类的实例变量时出现 StackOverflowError

问题描述

我试图在谷歌上搜索答案,但没有找到。为什么下面的程序是给的StackOverflowError

public class HelloWorld {
    private HelloWorld obj = new HelloWorld();  // (HelloWorld.java:2)

    public static void main(String args[]) {
        HelloWorld obj = new HelloWorld();
        obj.printHello();
    }

    private void printHello(){
        System.out.println("Hello world");
    }
}

输出:

Exception in thread "main" java.lang.StackOverflowError
    at HelloWorld.<init>(HelloWorld.java:2)
    at HelloWorld.<init>(HelloWorld.java:2)
    ....................

如果我注释实例变量obj,那么程序会打印“Hello world”并且没有错误。见下文:

public class HelloWorld {
//    private HelloWorld obj = new HelloWorld();

    public static void main(String args[]) {
        HelloWorld obj = new HelloWorld();
        obj.printHello();
    }

    private void printHello(){
        System.out.println("Hello world");
    }
}

输出:

Hello world

标签: javastack-overflow

解决方案


这是一个循环实例化错误。难怪!


推荐阅读