我们可以在Java中捕获错误吗?

时间:2015-02-03 09:43:27

标签: java exception error-handling

如果您运行以下代码,那么它将编译并成功运行,

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

所以我的问题是“我们能抓到错误” .. ??

4 个答案:

答案 0 :(得分:3)

回答你的问题是肯定的,你可以在java中发现错误。你的代码几乎是正确的。您的方法go()无限地调用自身,因此会导致StackOverflowError被捕获,并由System.out.println()

打印

答案 1 :(得分:1)

是的,我们会发现一个错误。

Throwable类是Java语言中所有错误和异常的超类。 Java虚拟机仅抛出属于此类(或其子类之一)的实例的对象,或者throw语句可以抛出该对象。

类似地,在catch子句中,只有此类或其子类之一可以作为参数类型。出于编译时检查异常的目的,ThrowableThrowable的任何子类(也不是RuntimeExceptionError的子类)被视为已检查的异常。

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)

请注意,StackOverflowExceptionStackOverflowError之间存在差异,因为您有错误,这是一个严重的迹象,表明您永远不应该尝试抓住它。

只是不要在代码中做无限的事情,当这个错误发生时,没有可用的堆栈空间,你想怎么做?

StackOverFlowError表示您遇到严重问题,抓住此错误是一个坏主意,而是尝试了解代码中存在的问题并进行修复。