java - 定义包含 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
解决方案
这是一个循环实例化错误。难怪!
推荐阅读
- angular - 用于可观察链接的仓促 forkjoin 替代 rxjs?
- jquery - 使用 jQuery 将输入字段替换为文本字段
- html - 提取属性
- r - 逐个元素解析大字符串的最快方法
- abap - READ_TEXT 仅在更改时才查找长文本
- oracle - 我们如何确保所有活动都从脚本和 PL/SQL 程序写入作业日志文件
- java - DB2 根据给定输入重新编号表中的值
- postgresql - postgres:为什么 SELECT NULL <> '' 返回 FALSE?
- delphi - 为什么这个赋值会导致编译器错误?
- javascript - 为什么我的 *ngFor 对 ngrx 状态更改做出反应,但我的订阅方法只执行一次