如果您运行以下代码,那么它将编译并成功运行,
public class Example {
public static void main(String[] args) {
// insert code here
try {
new Example().go();
// throw new OutOfMemoryError();
} catch (Error e) {
System.out.println(e);
}
}
void go() {
go();
}
}
使用以下输出:
java.lang.StackOverflowError
所以我的问题是“我们能抓到错误” .. ??
答案 0 :(得分:3)
回答你的问题是肯定的,你可以在java中发现错误。你的代码几乎是正确的。您的方法go()
无限地调用自身,因此会导致StackOverflowError
被捕获,并由System.out.println()
答案 1 :(得分:1)
是的,我们会发现一个错误。
Throwable
类是Java语言中所有错误和异常的超类。 Java虚拟机仅抛出属于此类(或其子类之一)的实例的对象,或者throw
语句可以抛出该对象。
类似地,在catch
子句中,只有此类或其子类之一可以作为参数类型。出于编译时检查异常的目的,Throwable
和Throwable
的任何子类(也不是RuntimeException
或Error
的子类)被视为已检查的异常。
try {
while(true) {
}
} catch (Throwable e) {
// TODO: handle exception
System.out.println(e);
}
答案 2 :(得分:0)
是的,您可以抓住Error
,但建议您不要这样做,因为Error
表示serious problems that a reasonable application should not try to catch
。 (如Error
的Javadoc所述)
答案 3 :(得分:0)
请注意,StackOverflowException
和StackOverflowError
之间存在差异,因为您有错误,这是一个严重的迹象,表明您永远不应该尝试抓住它。
只是不要在代码中做无限的事情,当这个错误发生时,没有可用的堆栈空间,你想怎么做?
StackOverFlowError
表示您遇到严重问题,抓住此错误是一个坏主意,而是尝试了解代码中存在的问题并进行修复。