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方法捕獲不到異常。

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