未捕获Java异常

C.罗斯:

为什么Java中的某些异常未被捕获catch (Exception ex)这是代码由于没有处理的异常而完全失败。(Java版本1.4)。

public static void main(String[] args) {
    try {
        //Code ...
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我得到一个 Exception in thread "main" java.lang.NoSuchMethodError

但这有效

public static void main(String[] args) {
    int exitCode = app.SUCCESS_EXIT_CODE;
    try {
        //Code ...
    } catch (java.lang.NoSuchMethodError mex){
        System.err.println("Caught NoSuchMethodError");
        mex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我懂了 Caught NoSuchMethodError java.lang.NoSuchMethodError:

我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常?

乔恩·斯基特(Jon Skeet):

因为某些异常不是源自Exception-例如ThrowableError

基本上,类型层次结构是:

       Object
         |
      Throwable
     /         \
Exception      Error

只能Throwables抛出和派生类,因此,如果您捕获Throwable,那实际上将捕获所有内容。

ThrowableException以及任何异常,从获得Exception 其他比那些源自RuntimeException数作为检查的异常 -他们是的,你必须声明你扔了,或者捕捉如果你调用的东西,抛出他们。

总而言之,Java异常层次结构有点混乱……

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章