另外, 默认处理程序是否捕获了我们抛出的异常?如果是,那么它取决于是否检查了异常?
答案 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),那么是:它们将处理通过“正常”捕获它们而无法处理的已检查和未检查的异常。