不使用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 {
}
答案 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下方的括号移到其上方。