当遇到第一个错误时,当java退出try块时,为什么需要multi-catch块?

ibps3vxo  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(333)

当运行时错误发生时,它退出try块。它将只抛出一个异常并进入catch块。那为什么我需要多个挡块?在哪里使用多挡块?
另外,我也可以用 Throwable 捕捉任何异常。是这样吗?

i2byvkas

i2byvkas1#

“编译器”没有这样做;编译器不在。异常是一种运行时现象。
您的问题似乎是询问运行时异常调度器如何选择异常处理程序:它基于类型匹配。
当你说“进入挡块”时,那是不对的。它选择第一个catch块,其参数类型与实际抛出的异常的赋值兼容。
如果你总是写信 catch (Exception ex) 那么这将捕获任何异常,因为 Exception 是所有异常类型的超类,如果这是第一个这样的catch块,则不会考虑其他块。但这并不总是一种合适的异常处理方式;你可能会被建议更具体一些。
也许这是理解多个catch块的一个好方法:您的意思是“如果是x类型的异常,那么就这样做;否则,如果它是y类型的异常,那么做另一件事;否则,如果它是一个z类型的异常,那么第三件事”。
fwiw,你很少想写 catch (Throwable th) 除非你完全意识到你这样做所干扰的机制。

bvjveswy

bvjveswy2#

可以使用multi-catch块来捕获不同类型的异常。假设您有一个实现throwable的自定义异常mycolexn。

try {
    // run piece of code
} catch (MyCoolExn e) { // catching your custom exception
    System.out.println("custom exception occurred");
} catch (Throwable e) { // catch any other exception
    System.out.println("an unknown exception occurred ");
}

请注意,块的顺序很重要。如果你交换它们,mycolexn将永远不会被捕获,因为trowable块将捕获所有东西

相关问题