欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java常用的異常類有哪些?

林國瑞2年前15瀏覽0評論

首先,我們知道Java有3種拋出異常的形式:throw(執行的時候一定拋出某種異常對象),throws(出現異常的可能性,不一定會發生),系統自動拋異常。

throw用在一個語句拋出異常的時候,throw(aninstanceofexceptionclass)比如一個方法/函數里,try{…}catch(Exceptione){thrownewArithmeticException(“XXX”);}finally{…};

throws則是用在聲明方法可能拋出異常的時候,throw(exceptionclass)比如publicintdivision(intx,inty)throwsArithmeticException{…};

系統自動拋異常則是當程序語句出現邏輯錯誤,主義錯誤或類型轉換錯誤的時候,系統自動拋出異常,比如inta=5;intb=0;c=a/b;這個時候移動會自動拋出ArithmeticException。


什么是異常

異常,顧名思義,就是有異于正常狀態,有錯誤發生。而這錯誤會阻止Java當前函數方法的運行。

那么Java里面異常的體系是怎么樣的呢?

1.Java里面所有不正常類都繼承于Throwable類;而Throwable類包括2類:Error類和Exception類。

2.Error類包括虛擬機錯誤(VirtualMachineError)和線程死鎖(ThreadDeath)。

3.Exception類則是我們在說的異常;包括運行時異常(RuntimeException)和檢查異常;這里的異常通常是編碼,環境,用戶操作輸入出現了問題。

4.運行時異常(RuntimeException)包括以下4種異常:空指針異常(NullPointerException),數組下標越界異常(
ArrayIndexOutOfBoundsException),類型轉換異常(ClassCastException),算術異常(ArithmeticException)。

空指針異常:

數組下標越界異常:

類型轉換異常:

算術異常:

5.最后剩下的檢查異常則是剩下各種異常的集合;這里發生異常的原因有很多,文件異常(IOException),連接異常(SQLException)等等;和運行時異常不同的是,這里的異常我們必須手動在代碼里添加try…catch…(finally…)語句來捕獲處理。

今天又了解學習到了一些具體的額外的異常:


Throw拋出異常詳細過程

和throws聲明方法可能會發生異常不同,throw語句則是直接拋出一個異常。

前面有提到,throw(aninstanceofexceptionclass),這里的一個exception類的實例其實也可以說是一個ExceptionObject(Throwable類或則其子類的對象;也可以是自定義的繼承自Throwable的直接或間接的異常類)。如果,我們用了thrownewString(“異常XXX”);則會在編譯的時候報錯,因為String類并不是Throwable類的子類。

接著讓我們回到怎么用throw語句的階段。

一般我們有兩種方式來用throw:直接在某處會發生異常的地方用throw語句或則用try…catch…finally…語句來捕獲處理異常和關閉釋放資源。

首先是第一種,直接在某處會發生異常的地方用throw語句;這是一種主動的方法,主動拋出異常去處理。

而第二種,用try…catch…finally…語句來捕獲處理異常和關閉釋放資源則是被動的方法。try里面放入可能會發生異常的語句塊,如果在運行期間遇到了異常,則會交給catch來處理異常(catch可以是多個,處理不同的異常),finally則是無論有沒有異常發生,只要加上了就會運行。

首先我們來看第一種方法的函數:

我們的intc=4/2,其實是正確的;但是我們的throw語句主動拋出了異常,那么程序就會到catch里面找有沒有這個異常,有的話進行處理。所以我們要主動拋異常的話,要很確信這個代碼一定會發生異常且后期不太會去變動了(最好放在if條件語句里)。所以我們得到的結果如下:

接著我們來看第二種方法。我們一開始先測正確的,只是把主動拋出異常語句給注釋掉:

因為try里面的語句塊沒有異常,所以只執行了try和finally里面的語句塊。運行的結果如下:

我們接著來測當try里面的語句塊有異常,且沒有主動拋出異常的時候,try會不會捕捉到異常吧:

得到的結果如下,會去處理異常和執行finally里面的語句塊:

最后深入理解一點try里面的異常觸發會逐層向上的這個概念。在我們try語句里主動/被動拋出異常的時候,程序會調向調用者程序(上面的例子里就是我們自己這個函數;但有的時候我們會在try語句里執行別的函數比如B,這個函數B里我們假如觸發了異常,它會調向try語句所在的函數A),尋找和它相匹配的catch語句,執行catch語句里面相應的異常處理程序;但假如沒有找到相匹配的catch語句,那么它會再轉向上一層的調用程序…這樣逐層向上,直到最外層的異常程序終止程序并打印出stacktrace。


參考資料

  1. rollbar.com/guides/java…
  2. www.javatpoint.com/throw-keywo…
  3. www.geeksforgeeks.org/throw-throw…

本文分享自華為云社區《Java-throw異常詳解以及過程-云社區-華為云》,作者:gentle_zhou。