對方不想和你說話,並向你拋出了個異常。

Java---異常

Java.lang.Throwablejava

                   |----Exception:程序能夠處理的異常程序員

                   |----Error:與虛擬機相關問題,系統崩潰,虛擬機問題,內存不足,內存堆棧溢出……建議程序中止。數據庫

 

異常:程序在運行時出現不正常狀況,java對不正常狀況進行描述後的對象體現。微信

-------------------------------------------------jvm

常見的處理方法函數

   |---String getMessage();spa

          |---String toString().net

          |---void printStackTrace();日誌

(jvm默認的異常處理機制其實就是調用printStackTrace());orm

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

 

異常的處理:

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.  若是父類或者接口的方法中無異常拋出,子類在覆蓋方法時,不能夠拋出異常,只能處理。

















本文分享自微信公衆號 - 微光點亮星辰(SandTower)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索