1.異常:就是程序運行過程中出現的不正常情況。
異常的由來:問題本身也是日常生活中一個具體的事物,也可以通過java類的形式進行描述,并封裝成對象。 其實,就是java對不正常情況描述的對象體現。
對于問題的劃分:一種是嚴重性問題,一種是非嚴重性問題。
對于嚴重的,java用Error類進行描述。
對于Error類一般不寫針對型代碼對其進行處理。
對于非嚴重的,java通過Exception類進行描述。
對于Exception類可以使用針對性處理方式進行處理。
無論Error類還是Exception類都有一些共性內容,
比如不正常情況的信息,引發原因等。
Throwable
--Error
--Exception
2.異常的處理
java中提供了特有的語句進行處理:
try
{ 需要被檢測的代碼;}
catch(異常類名 變量)
{處理方式; }
finally
{一定會執行語句; }
3.對捕獲到的異常對象進行常見方法操作。
getMessage();獲取異常的信息
toString();異常名稱:異常信息
PRintStackTrace();打印異常在堆棧中的跟蹤信息,包括異常名稱,異常信息,異常出現的位置。 其實JVM默認的異常處理方式就是調用printStackTrace()。
在方法上聲明異常,
便于提高安全性,讓調用處進行處理,不處理則編譯失敗。
對多異常的處理
1.聲明異常時,最好聲明為更具體的異常類型,這樣也能處理的更為具體。
2.對方聲明幾個異常,就對應幾個catch塊。
如果多個catch塊中的異常有繼承關系,使用父類異常的catch塊放在最后面,因為catch塊是按順序處理的。另外,不要定義多余的catch塊。
建議進行catch處理時,catch中一定要定義具體的處理方式,不要簡單地定義一句e.printStackTrace();
也不要簡單地就寫一條輸出語句。
自定義異常
因為項目中可能出現特有的問題,而這些問題并沒有被java所描述并封裝成對象,所以對于這些問題,可以按照java中對問題封裝的思想,將特有的問題進行自定義的異常封裝。
自定義異常類應該繼承Exception。
繼承Exception的原因:
因為異常類和異常對象都需要被拋出,它們都具備可拋性,這是Throwable體系所具有的特性。
這有這個體系中的類和對象才可以被throw和throws操作。
當在方法內部出現了throw拋出異常對象,那么就必須要給出對應的處理動作。要么在內部用try,catch處理;
要么在方法上聲明讓調用者處理。
一般情況下,方法內部出現異常,方法上需要聲明。
throws和throw的區別
throws 使用在方法上(小括號和大括號之間);
throw使用在方法內部。
throws后面跟的異常類名,可以跟多個,中間用逗號隔開。
throw后面跟的是異常對象。
Exception中有一個特殊的子類RuntimeException(運行時異常),
如果在方法內部拋出該類或者其子類異常,可以不再方法上聲明,編譯也可以通過;
如果在方法上聲明該類或其子類異常,調用者可以不用進行處理,編譯一樣通過。
之所以不需要再方法上進行聲明,是因為不需要調用者進行處理。
當該異常發生,程序就會停止運行,因為在運行時出現了無法繼續運算的情況,希望停止程序后,對代碼進行修改。
自定義異常時,如果該異常的發生,使程序無法繼續運行下去時,
就讓該自定義異常繼承RuntimeException。
對于異常分為兩種:
1.編譯時被檢測到的異常。
2.編譯時無法被檢測到的異常。(運行時異常。及RuntimeException及其子類)