一个 Catch 块是否可以在异常中阻塞 Follows finally 块?
finally{
baz();
}catch(MyException e){}
一个 Catch 块是否可以在异常中阻塞 Follows finally 块?
finally{
baz();
}catch(MyException e){}
不,它不能。Atry
后面应该跟一个catch
or finally
。如果有catch
那么finally
是最后一个块。此顺序将再次取决于嵌套。所以你可以有一个像下面这样的嵌套结构,但后面又try
跟着一个finally
or catch
。内部块catch
之后finally
属于外部块try
。
try {
// outer try
try {
// inner try
}
finally {
}
}
catch(SomeException e) {
}
您可以在JLS 14.20中阅读有关它的更多信息。
一个 Catch 块是否可以在异常中阻塞 Follows finally 块?
不,如果是相同的,则不会try
。
但是您可以通过使用您可信赖的 Java 编译器来快速发现这一点。
请注意,话虽如此,如果需要,您可以嵌套 try/catch 块,但 finally 之后的 catch 块将位于与前面的 finally 不同的范围级别。
我很好奇这个问题的煽动。finally() 必须始终是最终的,并且始终被调用,否则它不是真正的 finally。你想用这个来完成什么?因为我敢打赌,有更好的方法,也许你有一个XY 问题,而解决方案是尝试一种完全不同的方法。或者这是一个家庭作业问题?
你可以自己检查一下。以下情况是可能的try-catch-finally
情况1
try{
}catch(Exception e){
}finally {
}
案例2
try{
}finally {
}
案例3
try {
}catch (Exception e){
}
正如你所看到的,finally 应该在 try 或 catch 之后。同样 finally 不能在 catch 之前。
只有以下情况才有可能
try{
try{
} finally{
}
baz();
}catch(MyException e){}
但它是一个完全不同的结构。根据您问题的结构,这是不可能的。
该构造被称为 try-catch-finally。哪里 try 需要跟随 catch 或 finally 或两者兼而有之。如果这三个都存在,那么无论是否发生异常,都会在 try 块退出时执行 finally 块。
您在 finally 之后寻找捕获的原因可能是如何在 finally 中处理异常。除了在其中放置另一个 try/catch/finally 块之外,别无他法:-(