Java異常處理

Java的基本理念是「結果不佳的代碼不能運行」。 java

Java異常的相關介紹編程

java對異常進行了分類,不一樣類型的異常使用了不一樣的java類,全部異常的根類爲java.lang.Throwable.Throwable派生了2個子類:Error和Exception.數組

Error表示程序自己沒法克服和恢復的一種嚴重錯誤,程序只有死的份,如內存溢出和死鎖問題等系統問題。spa

Exception表示還能克服和恢復,其中又分爲系統異常和普通異常。系統異常是軟件自己缺陷致使的問題,也就是軟件開發問題考慮不周所致使的問題,軟件使用者沒法克服和恢復這種問題,但這種狀況下能夠選擇讓軟件繼續運行或死掉。如數組越界問題(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException),類轉換異常(ClassCastException);普通異常是運行環境的變化或異常致使的問題,是用戶可以克服的問題,如網路掉線、硬盤空間不足、IO異常發生這種異常後程序不該該死掉。指針

java爲系統異常和普通異常提供了不一樣的解決方案,編譯器強制普通異常必須try..catch處理或throws聲明繼續拋給上層調用方法處理。因此普通異常爲checked異常,而系統異常能夠處理也能夠不處理。編譯器不強制用try..catch或throws聲明,因此係統異常成爲uncheckde異常。orm

異常的捕獲和處理

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws。
一、 異常處理的基本語法
在java中,異常處理的完整語法是:對象

try{

//(嘗試運行的)程序代碼內存

}catch(異常類型 異常的變量名){作用域

//異常處理代碼開發

}finally{

//異常發生,方法返回以前,老是要執行的代碼

}
以上語法有三個代碼塊:
try塊,表示要嘗試運行代碼,try語句塊中代碼受異常監控,其中代碼發生異常時,會拋出異常對象。


catch塊會捕獲try代碼塊中發生的異常並在其代碼塊中作異常處理,catch語句帶一個Throwable類型的參數,表示可捕獲異常類型。當try中出現異常時,catch會捕獲到發生的異常,並和本身的異常類型匹配,若匹配,則執行catch塊中代碼,並將catch塊參數指向所拋的異常對象。catch語句能夠有多個,用來匹配多箇中的一個異常,一旦匹配上後,就再也不嘗試匹配別的catch塊了。
經過異常對象能夠獲取異常發生時完整的JVM堆棧信息,以及異常信息和異常發生的緣由等。


finally塊是緊跟catch語句後的語句塊,這個語句塊老是會在方法返回前執行,而無論是否try語句塊是否發生異常。而且這個語句塊老是在方法返回前執行。目的是給程序一個補救的機會。這樣作也體現了Java語言的健壯性。

二、 try、catch、finally三個語句塊應注意的問題

第1、try、catch、finally三個語句塊均不能單獨使用,三者能夠組成 try...catch...finally、try...catch、try...finally三種結構,catch語句能夠有一個或多個,finally語句最多一個。
第2、try、catch、finally三個代碼塊中變量的做用域爲代碼塊內部,分別獨立而不能相互訪問。若是要在三個塊中均可以訪問,則須要將變量定義到這些塊的外面。
第3、多個catch塊時候,只會匹配其中一個異常類並執行catch塊代碼,而不會再執行別的catch塊,而且匹配catch語句的順序是由上到下。

三、throw、throws關鍵字

throw關鍵字是用於方法體內部,用來拋出一個Throwable類型的異常。若是拋出了檢查異常,則還應該在方法頭部聲明方法可能拋出的異常類型。該方法的調用者也必須檢查處理拋出的異常。若是全部方法都層層上拋獲取的異常,最終JVM會進行處理,處理也很簡單,就是打印異常消息和堆棧信息。若是拋出的是Error或RuntimeException,則該方法的調用者可選擇處理該異常。

throws關鍵字用於方法體外部的方法聲明部分,用來聲明方法可能會拋出某些異常。僅當拋出了檢查異常,該方法的調用者才必須處理或者從新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,而不是囫圇吞棗通常在catch塊中打印一下堆棧信息作個勉強處理。

5個常見的RuntimeException:

NullPionterException,ArrayIndexOutOfBoundsException,StringIndexOutOfBoundsException,ClassCastException,NumberFormatException

建立自定義異常

Java提供的異常體系不可能預見全部但願報告的錯誤,因此能夠本身定義異常類來表示程序中可能遇到的特定問題。創建新的異常的類型最簡單的辦法就是讓編譯器爲你產生默認的構造器,這樣幾乎不用寫多少代碼。

例:class customizeException extends Exception {}

        public class SimpleException {

public void test throws customizeException(){

System.out.println("This is customizeException");

throw new customizeException();

}

public static void main(String[] args){

SimpleException simple=new SimpleException();

  try{

    simple.test();

  }catch(SimpleException e){

   System.out.println("Caught the customizeException");

  }

}

}

Exception是與編程有關的全部異常類的基類。

相關文章
相關標籤/搜索