標籤:
1、異常分為兩類:
--1)Error:Java虛擬機器無法解決的嚴重問題(例如資源耗盡等);
--2)Exception:其他編程錯誤或偶然的外在因素導致的一般性問題(例如null 指標異常、讀取的檔案不存在、網路中斷等)。
2、捕獲錯誤最理想的是在編譯期間,然後有些錯誤只有在運行時才會發生(編譯時間異常(checked)、運行時異常(unchecked))。
3、常見的運行時異常:
--1)數組下標越界:ArrayIndexOutOfBoundsException;
--2)算術異常:ArithmeticException;
--3)類型轉換異常:ClassCastException;
--4)null 指標異常:NullPointerException;
4、Java提供的是異常處理的抓拋模型。
--程式執行過程中如出現異常,會產生一個異常類對象,該異常對象將被提交給Java運行系統,這個過程稱為拋出異常;
--異常對象可由JVM自動產生,也可由開發人員手動建立。
5、try{}
catch(Exception1 e1){}//catch可以多寫,try中拋出的異常類對象從上往下匹配catch中的異常類類型,
catch(Exception2 e2){}//一旦滿足就執行catch中的代碼,該catch以後的其他catch不在匹配。
finally{//一定會被執行的代碼}//finally為可選
6、對於運行時異常,可不進行顯示的異常處理,但是對於編譯時間異常,則必須進行異常處理。
7、若有多個catch語句,且異常類對象存在繼承關係,則子類必須寫在父類前面,否則無法通過編譯。
8、若存在finally語句,則在處理異常之前先執行finally裡面的語句。
9、若不知道如何對異常進行處理,則可在方法聲明處,顯示的拋出該異常對象的類型,由該方法的調用者負責處理(throws),若調用者也不知道如何處理異常,則繼續向上一調用者拋出該類異常,最高可拋給虛擬機器進行處理。
10、手動拋出的異常類對象可以是已提供的異常類,也可以是自訂的異常類。
--例:
public class MyException extends Exception{ static final long serialVersionUID = -123435;//提供一個唯一的序號 //提供幾個構造器 public MyException(){ super(); } public MyException(String str){ super(str); }}
11、子類重寫父類的方法,其拋出的異常類型只能是被重寫的方法的異常類的子類或異常類型一樣。
12、異常總結(抓拋模型):
--try:執行可能產生的異常的代碼
--catch:捕獲異常
--finally:無論是否發生異常,代碼總被執行
--throw:異常發生階段(手動拋出異常對象)
--throws:異常處理方式(聲明方法可能要拋出的各種異常類)
Java筆記--異常