1

一个 Catch 块是否可以在异常中阻塞 Follows finally 块?

finally{
baz();
}catch(MyException e){}
4

5 回答 5

6

不,它不能。Atry后面应该跟一个catchor finally。如果有catch那么finally是最后一个块。此顺序将再次取决于嵌套。所以你可以有一个像下面这样的嵌套结构,但后面又try跟着一个finallyor catch。内部块catch之后finally属于外部块try

try {
    // outer try
   try {
     // inner try
    }
    finally {
    }
 }
 catch(SomeException e) {
 }

您可以在JLS 14.20中阅读有关它的更多信息。

于 2013-07-10T04:37:09.977 回答
2

一个 Catch 块是否可以在异常中阻塞 Follows finally 块?

不,如果是相同的,则不会try
但是您可以通过使用您可信赖的 Java 编译器来快速发现这一点。

请注意,话虽如此,如果需要,您可以嵌套 try/catch 块,但 finally 之后的 catch 块将位于与前面的 finally 不同的范围级别。

我很好奇这个问题的煽动。finally() 必须始终是最终的,并且始终被调用,否则它不是真正的 finally。你想用这个来完成什么?因为我敢打赌,有更好的方法,也许你有一个XY 问题,而解决方案是尝试一种完全不同的方法。或者这是一个家庭作业问题?

于 2013-07-10T04:35:04.910 回答
1

你可以自己检查一下。以下情况是可能的try-catch-finally

情况1

 try{

    }catch(Exception e){

    }finally {

    }

案例2

    try{

    }finally {

    }

案例3

    try {

    }catch (Exception e){

    }

正如你所看到的,finally 应该在 try 或 catch 之后。同样 finally 不能在 catch 之前。

于 2013-07-10T04:49:42.533 回答
1

只有以下情况才有可能

try{
   try{

   } finally{
   } 
   baz();
}catch(MyException e){}

但它是一个完全不同的结构。根据您问题的结构,这是不可能的。

于 2013-07-10T04:36:43.420 回答
1

该构造被称为 try-catch-finally。哪里 try 需要跟随 catch 或 finally 或两者兼而有之。如果这三个都存在,那么无论是否发生异常,都会在 try 块退出时执行 finally 块。

您在 finally 之后寻找捕获的原因可能是如何在 finally 中处理异常。除了在其中放置另一个 try/catch/finally 块之外,别无他法:-(

于 2013-07-10T04:40:22.827 回答