1. 程式人生 > >Java Exception分類與Try..cach。

Java Exception分類與Try..cach。

一  Try ....cach  finally.     參考:https://blog.csdn.net/loongshawn/article/details/50489706

看過網上關於Java中異常捕獲機制try…catch…finally塊中的finally語句是不是一定會被執行的討論也有很多。

首先明確一點,下面兩種情況finally肯定是不執行的:
1). return語句在try之前,還沒執行就返回了,當然不執行。

2). try語句中用了system.exit(0)強制退出JVM,暴力退出當然也不會執行

  ***try....cach 不一定要在有exception 的時候進行try, 在有可能的時候進行try, 可以避免程式  死掉的很好方法。

總結:

  1. finally語句在try和catch語句中的return執行後、返回前執行;
  2. 若finally語句中沒有return,則其執行結果不影響try和catch中已確定的返回值;
  3. 若finally語句中有return,則其執行後的結果會直接返回。
  4. 如過try ..cach ..finally  裡有return  .後面的就不會執行。

二 Exception 分類。         參考:https://www.cnblogs.com/taiwan/p/7073743.html

                     Throwable                      /                \              Error             Exception
                 /                   /               \         xxxxxx             xxxxxx          RuntimeException                                                          /                   \                                                     xxxxxx             ArithmeticException上圖的所有物件都是類.     Throwable 代表是可丟擲的.Error   代表的是嚴重錯誤,  這種錯誤程式設計師無法進行處理, 例如作業系統崩潰, jvm出錯, 動態連結庫失敗等.  Error並不是異常, 不是本文的重點.Exception   代表的就是異常了.  它下面很多派生類,   其中它的派生類也分兩種, 一種是RuntimeException(執行時異常), 其他的都是非執行時異常RuntimeException    包括除數為0, 陣列下標超界等. 執行時異常的派生類有很多, 其產生頻率較高.  它的派生類可以由程式處理或者拋給(throw) 給jvm處理. 例如上面的例子就是拋給了jvm處理, jvm把程式中斷執行, 並把錯誤資訊輸出到終端上.非RuntimeExcption   這種異常屬於Excepion的派生類(上面紅色的xxx), 但是不是RuntimeException的派生類,  這種異常必須由程式設計師手動處理,否則不通過編譯
.ArithmeticExcpetion   算術異常, 它是RuntimeException的派生類, 所以程式設計師不手動處理也通過編譯, 只不過出錯時會被jvm處理.