異常處理try-catch-finally筆記

當程序發生異常時,咱們指望:返回到一種安全狀態,並可以讓用戶執行一些其餘的命令;或者 容許用戶保存全部操做的結果,並以適當的方式終止程序。java

異常處理機制:程序的執行過程當中若是出現異常,會自動生成一個異常類對象,該異常對象將被提交給java運行時系統,這個過程成爲拋出(throw)異常。Java運行時系統接收到異常對象時會尋找處理這一異常的代碼,並把當前異常對象交給它處理,這一過程稱爲捕獲(catch)異常。若是java運行時系統未能找到能夠捕獲異常的方法,則運行時系統將會終止,相應的程序也將退出。數組

全部的異常都是由Throwable繼承而來,但在下一層當即分解爲兩個分支:Error和Exception。安全

Error類層次結構描述了Java運行時系統的內部錯誤和資源耗盡錯誤。函數

Exception層次結構。這個層次結構又分解爲兩個分支:一個分支派生於RuntimeException;另外一個分支包含其餘異常。劃分兩個分支的規則是:由程序錯誤致使的異常屬於RuntimeException;而程序自己沒有問題,但因爲像I/O錯誤這類問題致使的異常屬於其餘異常。this

派生於RuntimeException的異常包含下面幾種狀況:spa

  • 錯誤的類型轉換。指針

  • 數組訪問越界。code

  • 訪問空指針。對象

不是派生於RuntimeException的異常包括blog

  • 試圖在文件尾部後面讀取數據。

  • 試圖打開一個錯誤格式的URL

  • 試圖根據給定的字符串查找Class對象,而這個字符串表示的類並不存在。

「若是出現RuntimeException異常,那麼就必定是你的問題」

細節:

1、若是try中語句正確,將不會執行catch中的語句;若是try語句中發生異常,try中該語句後的語句將不會繼續執行,而是當即返回一個異常對象與catch中的異常對象進行匹配,若是匹配成功,將從catch後面就繼續執行(也就是說try中後面的語句不會被執行了);

2、能夠寫多個catch語句,注意他們的前後順序,子類必須在父類以前,不然父類型必定先於子類型被匹配,全部子類型就沒有機會執行了。JAVA編譯出錯。

3finally語句塊是必須被執行的(由於finally子句的這個特性,因此通常將釋放資源,關閉鏈接的語句寫在裏面)。

4、若是try{}中有個return語句,那麼finally中的代碼是否被執行呢?答案是執行的,並且在return前執行。

int f(int n)
{
    try{
        System.out.println("n = "+n);//下一條是return語句,因此從這裏跳入finally語句,執行完finally語句後再執行下面的return語句
        return n*n;//因爲先執行finally語句且函數被返回,此語句將不被執行了,若是finally中沒有return語句,將在執行finally後執行它。
    }catch(Exception e){

    } finally {
        System.out.println("do this?");
        return n;
    }
}
相關文章
相關標籤/搜索