這個案例是以文件讀取來測試Try catch finally 語句塊的執行順序,以及在各自從句中加入return 語句來觀察執行順序的改變:
代碼案例如下:
public static String testTryCatch() {
File file = new File("C:\\Users\\mdrk73\\Downloads\\test\\test.txt");
FileReader fr=null;
try {
System.out.println("==== try read file content :=====");
fr = new FileReader(file);
System.out.println(fr.read());
return "step1";
} catch (FileNotFoundException e) {
System.out.println("==== Catch FileNotFoundException===");
e.printStackTrace();
return "step2";
} catch (IOException e) {
System.out.println("==== Catch IOException===");
e.printStackTrace();
return "step3";
}finally {
if(fr!=null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("==== finally===");
return "finally-return"; //如果在finally裏面加return,那麼try 和catch從句中的return 語句都不會被執行。
}
}
Result 1: 當try語句塊中沒有異常的執行結果。
Result 2:當try語句中捕獲到FileNotFoundException 時的執行結果。
Result 3:在finally語句塊中放入return 語句的執行結果
總結:
1.在Try 語句塊中無論是否發生異常,finally語句塊都執行。可查看 result 1 & result 2
2.在finally語句塊中放置return語句將會導致Try,catch從句中的return語句無法執行。一般不在finally語句中放return 語句。可查看 result 3.