java 中的 try...catch...finally 块有 3 种排列。
- 试着抓
- 尝试...抓住...终于
- 尝试...终于
一旦执行了finally 块,控制就会转到finally 块之后的下一行。如果我删除finally块并将其所有语句移至try...catch块之后的行,这是否与将它们放在finally块中具有相同的效果?
我知道这是一个非常古老的问题,但我今天遇到并且对给出的答案感到困惑。我的意思是,它们都是正确的,但当这个问题有一个非常简单的实际答案时,它们都在理论甚至哲学层面上给出了答案。
如果您在 catch 块中放置了 return、break、 continue 或任何其他改变代码顺序执行的 java 关键字(或者甚至尝试阻止),finally 块内的语句仍然会被执行。
例如:
public void myFunc() {
double p = 1.0D;
String str = "bla";
try{
p = Double.valueOf(str);
}
catch(Exception ex){
System.out.println("Exception Happened");
return; //return statement here!!!
}finally{
System.out.println("Finally");
}
System.out.println("After finally");
}
执行此代码时将打印:
Exception Happened
Finally
这是finally 块存在的最重要原因。大多数答案都暗示了这一点,或者在旁边提到了它,但没有一个答案强调它。我认为因为这是一个新手问题,所以简单的答案非常重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)