可以检查异常,如果系统抛出,被默认处理程序捕获?

时间:2011-06-14 05:01:13

标签: java

另外, 默认处理程序是否捕获了我们抛出的异常?如果是,那么它取决于是否检查了异常?

3 个答案:

答案 0 :(得分:2)

任何Throwable都可以被捕获。但是Error的子类并不打算被用户应用程序代码捕获。它们仍然可以被捕获,但是一些错误甚至可能使应用程序处于不良状态(例如OutOfMemoryError)。

答案 1 :(得分:0)

catch块将捕获声明的Throwable类型的任何子类型。例如,catch (Exception ex) {}将处理try块中抛出的任何异常,因为即使RuntimeException(未选中)也是子代。

请注意,这不会捕获Error的实例,因为它们不是异常的子类。如果你真的想要一个全部捕获,你可以使用像catch (Throwable th)这样的东西。这是不可取的,因为错误通常表示应用程序无法自行恢复的问题。

答案 2 :(得分:0)

关于已检查/未检查的异常有一个鲜为人知的事实:在编译时,区别仅存在

如果通过一些丑陋的技巧,你设法在一个未被声明被抛出的地方抛出一个已检查的异常,那么它将被处理就像一个未经检查的异常(即它会落入尽可能多的堆栈必要的帧以到达最近的匹配捕获块)。是的,存在这样的伎俩。

如果默认处理你的意思是Thread default uncaught exception handler(或per-thread uncaught exception handler),那么是:它们将处理通过“正常”捕获它们而无法处理的已检查和未检查的异常。