gpt4 book ai didi

java - 当代码位于 try 和 catch 语句中时,为什么会引发 StackOverflowError?

转载 作者:行者123 更新时间:2023-12-01 07:43:19 24 4
gpt4 key购买 nike

我正在尝试为我自己创建的语言的解释器编写一个 API,到目前为止我已经有了三个类:

这是“CandleInterpreter”类(主要 API 类)的片段:

protected Class<?> inputClass;
protected Class<?> outputClass;
public String input;
protected String currentFile;

public CandleInterpreter(Class<?> inputClass, Class<?> outputClass) {
this.inputClass = inputClass;
this.outputClass = outputClass;
this.input = "";
this.currentFile = "";
}

这个类包含这个方法:

public void output(String message) {
try {
outputClass.getConstructor(String.class).newInstance(message);
} catch (Exception exception) {
output("Output class is invalid.");
System.exit(0);
}
}

这是“Output”类的片段:

public class Output {
public Output(String message) {
System.out.println(message);
}
}

这是“Main”类的片段:

public static void main(String args[]) {
CandleInterpreter interpreter = new CandleInterpreter(Input.class, Output.class);
interpreter.output("Hello World!");
}

这段代码工作正常,但在主类中,当我将不同的类传递到“CandleInterpreter”对象(而不是“Output.class”类)时,会抛出“StackOverflowError”:

Exception in thread "main" java.lang.StackOverflowError
at java.base/java.lang.StringUTF16.compress(StringUTF16.java:158)
at java.base/java.lang.String.<init>(String.java:3002)
at java.base/java.lang.String.<init>(String.java:250)
at java.base/java.util.StringJoiner.toString(StringJoiner.java:187)
at java.base/java.lang.Class.methodToString(Class.java:3374)
at java.base/java.lang.Class.getConstructor0(Class.java:3302)
at java.base/java.lang.Class.getConstructor(Class.java:2110)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:107)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
...

我很困惑为什么会抛出这个错误,因为我有代码行“outputClass.getConstructor(String.class).newInstance(message);”在 try 和 catch 语句中。谁能解释一下吗?谢谢。

-PrimeCubed

最佳答案

StackOverflowError 是错误,而不是异常。捕获Exception不会捕获StackOverflowError

可以捕获它 - 无论是 StackOverflowErrorErrorThrowable - 但你认为你能做什么这样做可以达到什么目的? 错误意味着无法恢复的情况。

关于java - 当代码位于 try 和 catch 语句中时,为什么会引发 StackOverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61029428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com