java中全部異常類都繼承Throwable類,Throwable主要有兩個子類,爲Error 和 Exception。java
Error 主要爲虛擬機錯誤(VirtualMachineError)和線程死鎖(ThreadDeath)。若是出現了Error錯誤,意味着程序崩潰了。數組
Exception 通常指編碼、環境、用戶操做輸入出現了問題。Exception主要分兩類,RuntimeException(非檢查異常)和檢查異常。引發RuntimeException的緣由有不少,好比引用了一個空對象的屬性或方法(NullPointerException),也有多是數組訪問越界(ArrayIndexOutOfBoundsException)或者是錯誤的類型轉換(ClassCastException),還有算術方面的錯誤(ArithmeticException)。此類異常由java虛擬機拋出並處理,出現運行時異常通常是代碼自己有問題,應該從邏輯方面來改進代碼。引發檢查異常的緣由也不少:好比說文件異常(IOException)、SQL異常(SQLException). 此類異常須要手動添加處理代碼,java虛擬機不處理。編碼
異常處理:線程
try...catch:若是try中的語句出現異常,程序的控制權將被移交給catch塊中的一場處理程序。咱們能夠在一個try後面輸入多個catch塊,來主要不一樣異常。catch塊的書寫順序要按從小到大的順序來寫。如:ArithmeticException-->Exception.code
try...catch...finally:finally中輸入最終要執行的代碼。無論有沒有發生異常都會執行finally裏的語句。
對象
5.java中的異常拋出以及自定義異常繼承
a.異常拋出
資源
i.throw : 講產生的異常拋出(動做)
虛擬機
ii.throws :寫在方法名或者方法的參數表以後,在方法體以前。
it
public void 方法名(參數列表) throws 異常列表{ throw new Exception(); }
b.自定義異常
class 自定義異常類 extends 異常類型{};
public class DrunkException extends Exception{ public DrunkException(){} public DrunkException(String message){ super(message); } }
6.java中的異常鏈
public class ChainException(){ public static void main(String args[]){ ChainException ce = new ChainException(); try{ ce.test2(); }catch(Exception e){ e.printStackTrace(); } } public void test1() throws DrunkException{ throw new DrunkException("喝酒別開車"); } public void test2(){ try{ test1(); }catch(DrunkException e){ RuntimeException runExce = new RunctimeException("司機一滴酒,親人兩行淚 ~~"); runExce.initCause(e); //或者 RuntimeException runExce = new RunctimeException(e); throw runExce; } } }
7.總結:
a.處理運行時異常,採用邏輯去合理規避同時輔助try-catch語句。
b.在多重catch以後,加上catch(Exception e)來處理可能會被遺漏的異常。
c.對於不肯定的代碼,也能夠加上try-catch,處理潛在的異常。
d.儘可能去處理異常,切忌只是簡單的調用printStackTrace()去打印異常。
e.具體若是處理異常,要根據不一樣業務需求和異常類型去決定。
f.儘可能添加finally語句塊,來釋放佔用的資源。