当前位置: 首页 > 面试题库 >

在线程“ main”中获取异常java.lang.StackOverflowError

邢焱
2023-03-14
问题内容

我是Java和OOP的新手,这是我的问题。当我运行以下代码时,我得到了

线程“主”中的异常java.lang.StackOverflowError。

问题出在我创建对象的代码中JavaApplication1。class不会发生问题App2。如果ja在run方法内部创建对象,则代码可以正常工作。你能解释一下为什么吗?

package javaapplication1;

public class JavaApplication1 {

    int i, k, j;

    class App2 {
        int i = 23;
        int j = 12;
    }

    App2 a2 = new App2();
    JavaApplication1 ja = new JavaApplication1();

    public void run() {
        ja.i = 10;
        a2.i = 26;
        a2.j = 18;
        System.out.println(i + "," + j + "'" + ja.i + "'"
                           + a2.i + "'" + a2.j + "'" + k);
    }

    public static void main(String[] args) {
        int k = 24;
        JavaApplication1 ja1 = new JavaApplication1();
        ja1.run();
        ja1.i = 18;
        System.out.println(ja1.i + "'" + "'" + k);
    }
}

问题答案:

您的类的JavaApplication1字段JavaApplication1 ja包含JavaApplication1类的另一个实例,也有自己的ja字段,包含的另一个实例JavaApplication1,依此类推。

换句话说,当您创建JavaApplication1该实例的实例时,将创建其内部实例,JavaApplication1并且此内部实例将创建另一个JavaApplication1实例,该实例再次创建实例JavaApplication1…,直到堆栈已满。

因此,当您在main方法中运行此代码时

JavaApplication1 ja1 = new JavaApplication1();

这样的事情发生

       +-----------------------------------------------+
ja1 -> | JavaApplication1 instance                     |
       +-----------------------------------------------+
       |                                               |
       |       +------------------------------------+  |
       | ja -> | JavaApplication1 instance          |  |
       |       +------------------------------------+  |
       |       |                                    |  |
       |       |       +-------------------------+  |  |
       |       | ja -> |JavaApplication1 instance|  |  |
       |       |       +-------------------------|  |  |
       |       |       |                         |  |  |
       |       |       | ja -> ....              |  |  |
       |       |       +-------------------------+  |  |
       |       +------------------------------------+  |
       +-----------------------------------------------+

无论如何,我看不到ja字段的使用位置,因此请考虑将其从代码中删除。



 类似资料:
  • 最近我正在学习Spring框架。所以我正在尝试检查依赖注入在Spring框架中的工作原理。因此,我创建了一个新的java项目并使用基于构造函数XML的配置练习依赖注入代码。运行我的项目后,我收到了这个错误...... 类路径资源[com/mir00r/beans.XML]的XML文档中的第24行无效;嵌套异常为组织。xml。萨克斯。SAXParseException;行号:24;列数:9;cvc复

  • 我正在学习selenium并尝试运行以下代码,但它引发了异常。NoSuchFieldError:空字节数组。请帮助我理解这个简单的程序出了什么问题。 控制台: 异常线程"main"java.lang.NoSuchFieldError:EMPTY_BYTE_ARRAY

  • 我在Windows 10上使用Netbean上的JDK 14。在IDE环境中一切正常。但是,当我尝试从命令提示符编译和运行源文件时,我得到了。 系统变量中的PATH和CLASSPATH包含,。 如果我从命令提示符发出java-version,在java_主目录中,我会得到以下结果: 如果我从java_HOME\bin目录发布java-version,我会收到下面列出的另一条消息: 我不确定为什么?

  • 好的,我正在使用eclipse-neon-Client-combined-3.1.0-nodeps。firefox安装程序39.0的jar 这是我的代码 这就是错误 线程“main”java中出现异常。lang.NoClassDefFoundError:com/google/common/base/Function at T1。main(T1.java:12)由:java引起。lang.Class

  • 问题内容: 每当我运行此命令时,该函数就可以正常使用。当我选择洞穴时,消息会每隔2秒弹出一次,然后当它越过该部分时,就会出现错误: 我已经尝试过和,并且在该方法中使用时,出现了很多错误。当我在方法中使用时,它不接受我的输入。 当我在该方法中使用时,它不接受我的字符串输入,而直接进入另一个游戏,但是布尔值返回并且它无限地发送垃圾邮件“ Which Cave …”。 我已经阅读了错误报告,以及类似问题