try、catch、finally巧遇return

Java異常處理

         Java的基本理念是“結構不佳的代碼不能運行”--Thinking in Java。

         Java中的異常處理是一種在編譯階段的錯誤報告機制,是通過編譯器強制執行的。不過尚須明白的

是:編譯期間並不能找出所有的錯誤,餘下的問題必須在運行期間解決。

         簡單的來說,異常處理目的在於通過少量的代碼是你的程序更加可靠。

try、catch、finally巧遇return

          對於Java中異常如何使用,這裏筆者不在提及。這裏筆者感興趣的是try、catch、finally塊中遭遇

return語句時的執行情況,以及其返回值情況(總有這些筆試、面試題)。

          首先需要注意的是方法執行到return語句便會返回結果並終止是錯誤的,特例就是Java的異常體系。

          看下面的例子程序:

package com.al;

public class ExceptionTest{
    @SuppressWarnings("finally")
	public String test(){
    	String returnStr ="start";
    	try {
			System.out.println("start String:"+returnStr);
			returnStr="try innner";
			throw new Exception("inner Exception");
		} catch (Exception e) {
			returnStr ="catch inner";
			return returnStr;
		}finally{
			returnStr = "finally";
			System.out.println("inner finally:"+returnStr);
			return returnStr;
		}
    }
    
    public static void main(String[] args) {
		ExceptionTest exceptionTest = new ExceptionTest();
		try {
		   String test=	exceptionTest.test();
			Thread.sleep(300);
			System.out.println("returnString:"+test);
		} catch (InterruptedException e) {
			// TODO: handle exception
		}
	}
}
                       輸出結果爲:

                                start String:start
                                inner finally:finally
                                returnString:finally

           掌握下面的幾條規則我們就可以很好的解決巧遇return的問題了。

           1、finally語句塊的代碼是必定會執行的,而catch語句塊的代碼只有發生異常時才能執行

           2、方法執行碗try中的return之後不會終止,會繼續執行catch(try中拋出異常時)、finally塊

           3、方法必須確保返回值,且該值唯一。

           4、return語句的優先級是finally最大,且try、catch兩者之一的return會被執行,爲保證

                 第3條原則,返回優先級最大的值。

           對於一個具有返回值的方法來說,保證該方法具有一個返回值在編譯階段就必須被確認。

 try中如果包含return語句,則catch塊和finally中必須有一個return語句.。另一種情況是try中通過

 throw拋出異常,同樣catch與finally至少有一個retrun語句。因爲try塊會假定其中發生異常,

  且try塊中的代碼要麼順利執行,要麼拋出異常。如果只在try塊中包含return語句不能保證函數有

  返回值(如try拋出時,return語句不會執行)。所以爲了保證函數具有返回值,java強制要求原則。


發佈了178 篇原創文章 · 獲贊 42 · 訪問量 91萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章