为什么我们不能捕获Java中的错误?

lie*_*ies 3 java error-handling

我知道,这会损害应用程序的性能,但是我们不应该围绕代码区域,因为这些区域确实存在风险

try {
    // code        
} catch (OutOfMemoryError ex) {
    // handling code
}
Run Code Online (Sandbox Code Playgroud)

它看起来很安全.

来自docs:

Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题.

为什么不?

Sea*_*man 10

您通常不应该尝试处理这些错误的原因是因为通常情况下您不会对它们做任何事情.

它们往往是JVM级错误,而不是应用程序级错误--OutOfMemory就是一个很好的例子.如果JVM内存不足,你的程序会做什么?即使你确实抓住它,也没有保证处理代码会以一致的方式完成/继续,因为终端条件被抛出