案例詳解Try, catch, finally 語句塊中加入return 的執行順序

這個案例是以文件讀取來測試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.

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