finally块中不允许使用return,continue或break的原因

finally块中不允许使用return,continue或break的原因

一个try块可以不执行finally子句就能够退出的唯一方法是通过调用System.exit()方法来实现的。

如果控制因为一个return,continue或break指令离开这个try块,那么finally块会在控制转移到它的新的目标代码之前执行.

也就是说如果在finally块中使用return,continue或break,则会把抛出的异常吃掉。

同理:如果在finally块中使用throw或代码有问题抛出异常,也会吃掉原始的异常,不过因为此时能够抛出新的异常,可以跟踪,也就不是问题了。

package test;

public class TryTest {
public static void main(String[] args) {
try {
TryTest tryTest = new TryTest();
System.out.println(tryTest.test());
} catch (Exception e) {
e.printStackTrace();
}
}

public boolean test() throws Exception {
try {
throw new Exception(“Something error”);// 1.抛出异常
} catch (Exception e) {// 2.捕获的异常匹配(声明类或其父类),进入控制块
throw e;// 3. throw前控制转移到finally块,执行完后再返回
} finally {
return true;// 4. 控制转移,直接返回,不再返回catch块,吃掉了异常
}
}
}

打印结果为true,main方法捕获不到异常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章