天天看點

對方不想和你說話,并向你抛出了個異常。Java---異常

Java---異常

Java.lang.Throwable

|----Exception:程式可以處理的異常

|----Error:與虛拟機相關問題,系統崩潰,虛拟機問題,記憶體不足,記憶體堆棧溢出……建議程式停止。

異常:程式在運作時出現不正常情況,java對不正常情況進行描述後的對象展現。

-------------------------------------------------

常見的處理方法:

|---String getMessage();

|---String toString()

|---void printStackTrace();

(jvm預設的異常處理機制其實就是調用printStackTrace());

-------------------------------------------------

異常的處理:

try { …}

catch(異常類 變量 ) { //處理幾個異常就聲明幾個catch

(多個catch塊中的異常出現繼承關系時,父類catch塊要放在子類catch下面)

}finally{ …}//非必須,但聲明後一定會執行,一般用于釋放資源

Eg:資料庫異常時無法關閉資料庫,可使用finally,對資源的關閉

例外:System.exit(0)系統退出,jvm結束,finally不執行。

------------------------------------------------

異常的聲明(throws)

編寫Demo時,代碼可能發生異常

通過throws聲明功能可能會出現的異常:

Eg: int div(int a ,int b)throws Exception{

Return a/b;//我們知道b=0時會抛出ArithmeticException;

public static voidmain(String [] args){

try{ …} catch(Exception e){ …}

}

(catch 處理時,最好要有具體的處理形式,例如異常日志檔案等)

-------------------------------------

自定義異常:

項目中會出現持有的問題,而這些問題并未被java所描述并封裝對象時,可将這些問題進行自定義的異常封裝(自定義類繼承異常類)

繼承異常的原因:

因為異常類和異常對象都被抛出,他們都具備可抛性,這個可抛性是Throwable體系特點,隻有這個體系中的類和對象才可以被throws和throw操作

------------------------------

假設:a/b中,除數如果是負數和0都認為是錯的異常描述。

class IException extendsException{

//可重寫Exception方法;

//定義構造方法;//與普通類繼承基類相似構造;

父類把異常資訊操作完成了,子類隻要在構造時用super(message)傳遞資訊給父類,即可調用父類方法(getMessage())

class Demo{

int div(int a,int b)throwsIException{

if(b<=0)

throw new IException();// 函數内throw 異常,在函數上要

//聲明或者在内部處理

return a/b;

}

--------------------

throw和throws的差別:

throws使用在函數上,throw使用在函數内,throws後跟若幹個異常類,逗号隔開,throw後跟異常對象。

---------------------------------

異常

|----編譯時被檢測的異常

|----編譯時不被檢測,運作時異常(RuntimeException以及其子類)

RuntimeException:

特點:函數内抛出,函數上可不聲明,編譯通過(不需要讓調用者處理,當異常發生,希望程式停止,希望停止程式後,由程式員對代碼進行驗證)

若在函數上聲明,調用者可不處理,編譯通過。

心得:如果希望某異常發生時程式停止,就讓自定義異常繼承RuntimeException

-----------------------------------

異常在父類覆寫中的展現:

  1. 1. 子類在覆寫父類時,如果父類的方法抛出異常,那子類的覆寫方法,隻能抛出父類的異常或該異常的子類:

class AException extends Exception{

…}

class BException extends AException{

…}

class CException extends Exception{

…}

class Fu {

voidshow()throws AException{…}

}

Class Zi extends Fu{

Voidshow()throws AException ,BException{//不能聲明CException}

}

(如果子類真發生其他異常,隻能try處理,不能抛出)

------------------------------

  1. 2. 如果父類方法抛出多個異常時,那麼子類在覆寫方法時,隻能抛出父類異常的子集,即父類若抛出AException,BException,則子類可抛出其中之一或兩個。
  2. 3. 如果父類或者接口的方法中無異常抛出,子類在覆寫方法時,不可以抛出異常,隻能處理。