catch块是否能够捕获Throwable(错误和异常)

Rom*_*omi 10 java exception

在我的一次采访中,他们问我,是否可以像这样在catch()中编写Throwable

try{
some code
}
catch(Throwable t)
{
}
Run Code Online (Sandbox Code Playgroud)

我说是.它不会给出编译时错误,但如果出现Error(Throwable的子类),jvm将无法处理它,因为错误是jvm无法处理的不可逆条件.比他们进一步询问的是什么是写作Throwable的用法.

请给我正确的答复我们可以使用Throwable in catch.如果是,为什么.

hom*_*ome 12

有可能赶上Throwable.是的,java.lang.Error当涉及到例如OutOfMemoryError's 时,你也会抓住哪些实例是个问题.一般来说,我不会抓到Throwable.如果必须,您应该在调用堆栈的最高位置执行此操作,例如main方法(您可能希望捕获它,记录它并重新抛出它).

我同意你的论证,捕捉你无法处理的事件是没有意义的(例如OutOfMemoryError).这里有个好帖子.

  • @romi - 为什么不写一个测试程序并找出来?对各种JVM进行测试,然后在下次被问到问题时真正吹走面试官! (2认同)