Catch块可以在异常中跟随Finally块吗?
finally{
baz();
}catch(MyException e){}
答案 0 :(得分:6)
不可以。 try
之后应加catch
或finally
。如果有catch
,则finally
是最后一个块。此订单将再次依赖于嵌套。因此,您可以拥有如下所示的嵌套结构,但try
后面再加上finally
或catch
。内部catch
块之后的finally
属于外部try
。
try {
// outer try
try {
// inner try
}
finally {
}
}
catch(SomeException e) {
}
您可以在JLS 14.20中了解更多相关信息。
答案 1 :(得分:2)
Catch块可以在例外中跟随Finally块吗?
不,不是因为它是try
但是你可以通过使用可靠的Java编译器来快速找到它。
注意,说过这个,你可以在需要的时候嵌套try / catch块,但是在finally之后的catch块再次与前面的最后一个不同。
我很好奇这个问题的煽动。 finally()实际上必须始终是final,并且总是被调用,否则它最终不是真的。你想用这个来完成什么?因为我敢打赌,有一种更好的方法,也许你所拥有的是XY problem,解决方案是尝试一种完全不同的方法。或者这是一个家庭作业问题?
答案 2 :(得分:1)
仅适用于以下情况
try{
try{
} finally{
}
baz();
}catch(MyException e){}
但这是完全不同的结果。根据你的问题的结构,这是不可能的。
答案 3 :(得分:1)
该构造被称为try-catch-finally。在尝试需要跟随捕获或最后或两者。如果所有这三个都存在,则无论是否发生异常,当try块退出时始终执行finally块。
你最终寻找捕获的原因可能是如何在最后处理异常。没有其他方法,而不是在其中放入另一个try / catch / finally块: - (
答案 4 :(得分:1)
您可以自己查看。使用try-catch-finally
案例1
try{
}catch(Exception e){
}finally {
}
案例2
try{
}finally {
}
案例3
try {
}catch (Exception e){
}
正如你所看到的,最终应该在尝试或捕获之后。同样终于不能赶上。