不使用finally,即使抛出异常,我们如何执行任何语句?

时间:2014-11-27 10:32:34

标签: java exception-handling

不使用finally,即使抛出异常,我们怎样才能执行任何强制语句? 此外,使用的变量或方法仅在try块内具有范围。我在接受采访时问过这个问题。请提出答案。

try{
    //........ statement 1
    // ....... statement 2 might throw an Exception
    // ....... statement 3  - A compulsory statement
                             needs to be executed even if exception is thrown.

   }
 catch {

 }

4 个答案:

答案 0 :(得分:2)

这实际上只是学术性的 - 如果你想在抛出异常后执行一个语句,你真的应该最终使用。但是,可以在try-catch-block中捕获异常,将您的语句放在catch子句中,然后重新抛出异常。强调可以,当然你不应该。

/*
 * DO NOT DO THIS! (Even if you could.)
 */
try {
    //........ statement 1
    Exception e = null;
    try {
        // ....... statement 2 might throw an Exception
    } catch (Exception e2) {
        e = e2;
    }
    // ....... statement 3  - A compulsory statement
    //                         needs to be executed even if exception is thrown.

    if (e!=null) {
        throw e;
    }
}
catch {

}

答案 1 :(得分:0)

你可能将有问题的部分包装到另一个catch块中并手动管理最终会做什么

try{
    //........ statement 1
    Exception saved = null;
    try {
        // ....... statement 2 might throw an Exception
    } catch (Exception e) {
        saved = e;
    }
    // ....... statement 3  - A compulsory statement
    //                        needs to be executed even if exception is thrown.
    if (saved != null) throw saved;
   }
 catch {

 }

这有点问题,因为您必须catch(Throwable)才能获得与finally相同的效果,而Throwable是一个经过检查的异常,这意味着您突然必须声明它或使用肮脏的技巧:Java SneakyThrow of exceptions, type erasure

答案 2 :(得分:0)

非常糟糕的例子从来没有这样做过。 最终使用。 JAVA开发人员已经做了很多事情,最终提供给你。

尝试{

// statement 1

try {
    // statement 2    ---- might throw an Exception
} catch (Exception e) {

}
  // Put your compulsory statement 3 here. 

} 赶上{

}

这是我可以建议的。

答案 3 :(得分:0)

这个怎么样:

boolean flag = true;
int firstExecution = 0;
while(flag){
try{
firstExecution++;
if(firstExecution==1){
//........ statement 1

// ....... statement 2 might throw an Exception
}
// ....... statement 3  - A compulsory statement
                         needs to be executed even if exception is thrown.
flag=false;
}
catch {}
}

如果您想尝试一次又一次地执行语句2,那么您可以将语句2下方的括号移到其上方。