JAVA的異常處理機制:如果某個方法不能按照正常的途徑完成任務,就可以通過另一種路徑退出方法。在這種情況下會拋出一個封裝了錯誤資訊的對象。此時,這個方法會立刻退出同時不返回任何值。另外,調用這個方法的其他代碼也無法繼續執行,異常處理機制會將代碼執行交給異常處理器。 一、異常分類如下:
–>Throwable是 Java 語言中所有錯誤或異常的超類。下一層分為Error和Exception
–>Error類是指java運行時系統的內部錯誤和資源耗盡錯誤。應用程式不會拋出該類對象。如果出現了這樣的錯誤,除了告知使用者,剩下的就是儘力使程式安全的終止。
–>Exception又有兩個分支,一個是運行時異常RuntimeException,如:NullPointerException、ClassCastException;一個是檢查異常CheckedException,如I/O錯誤導致的IOException、SQLException。
–>RuntimeException是那些可能在 JAVA 虛擬機器正常運行期間拋出的異常的超類。派生RuntimeException的異常一般包含幾個方面:
1、錯誤的類型轉換
2、數組訪問越界
3、訪問null 指標
如果出現RuntimeException,那麼一定是程式員的錯誤
–>檢查異常CheckedException一般是外部錯誤,這種異常都發生在編譯階段,Java編譯器會強製程序去捕獲此類異常,即會出現要求你把這段可能出現異常的程式進行try catch,該類異常一般包括幾個方面:
1、試圖在檔案尾部讀取資料
2、試圖開啟一個錯誤格式的URL
3、試圖根據給定的字串尋找class對象,而這個字串表示的類並不存在 二、異常的處理方式:
1、遇到問題不進行具體處理,而是繼續拋給調用者
拋出異常有三種形式,一是throw,一個throws,還有一種系統自動拋異常。
//程式編寫者知道某句代碼一定發生異常,使用throw關鍵字拋出public static void main(String[] args) { String s = "abc"; if(s.equals("abc")) { throw new NumberFormatException(); } else { System.out.println(s); } }
int div(int a,int b) throws Exception{return a/b;}
//系統自動拋出異常public static void main(String[] args) { int a = 5, b =0; System.out.println(5/b); }
注意:
Throw和throws的區別:
1. 位置不同:throws用在函數上,後面跟的是異常類,可以跟多個;而throw用在函數內,後面跟的是異常對象。
2. 功能不同:throws用來聲明異常,讓調用者只知道該功能可能出現的問題,可以給出預先的處理方式;throw拋出具體的問題對象,執行到throw,功能就已經結束了,跳轉到調用者,並將具體的問題對象拋給調用者。也就是說throw語句獨立存在時,下面不要定義其他語句,因為執行不到。
3. throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常對象。
4. 兩者都是消極處理異常的方式(這裡的消極並不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。
2、針對性處理方式:捕獲異常
Try{//有可能發生異常的代碼} Catch(異常類 變數){// 處理異常的代碼,捕獲}finally{//一定會被執行的代碼}
三、RuntimeException和CheckedException的區別
RuntimeException:在定義方法時不需要聲明會拋出RuntimeException, 在調用這個方法時不需要捕獲這個RuntimeException;總之,未檢查異常不需要try…catch…或throws 機制去處理
CheckedException:定義方法時必須聲明所有可能會拋出的exception; 在調用這個方法時,必須捕獲它的checked exception,不然就得把它的exception傳遞下去
總之,一個方法必須聲明所有的可能拋出的已檢查異常;未檢查異常要麼不可控制(Error),要麼應該避免(RuntimeException)。如果方法沒有聲明所有的可能發生的已檢查異常,編譯器就會給出錯誤資訊