Catch Follows finally块在java中

时间:2013-07-10 04:34:38

标签: java exception-handling

Catch块可以在异常中跟随Finally块吗?

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

5 个答案:

答案 0 :(得分:6)

不可以。 try之后应加catchfinally。如果有catch,则finally是最后一个块。此订单将再次依赖于嵌套。因此,您可以拥有如下所示的嵌套结构,但try后面再加上finallycatch。内部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){

    }

正如你所看到的,最终应该在尝试或捕获之后。同样终于不能赶上。