1. 程式人生 > >Java中的Exception的異常分類與try,catch的處理

Java中的Exception的異常分類與try,catch的處理

一、 異常:  

1:錯誤的分類
          1)Error:錯誤(不可控),一般指的是系統方面的異常,比如 藍屏,記憶體溢位,jvm執行環境出現了問題。
          2) Exception:是可控的異常,程式設計師可以在編寫程式時解決的錯誤。   
          3)**兩者的父類為Throwable;
2:可以控制的異常:
          Exception:是所有異常的父類,其下面可以派生出很多子型別。
3:異常處理機制。
      在編寫程式時,某一塊程式碼可能會某些異常。我們應該對這塊
           1) 進行異常處理。怎麼處理呢? 
        如下語法:--解決方法


                try{
                    捕捉程式碼片段出現的異常資訊,然後封裝成異常物件//可能出
                    現異常的程式碼塊放入try{}中,
                 }catch(異常型別的宣告--引用捕捉到的異常物件){
                   //處理異常
               }finally{
                             /*不管try中是否出現異常,都會執行此部分程式碼。
                              一般都用來用做關閉,釋放等操作。
                                try中出現return 也會執行finally中的語句
                             */
               } 
                2)進行處理過程: 我們將可能出現異常的程式碼塊放入try{}中,
                          ①jvm會進行檢查try{}中的程式碼,
                                    如果有異常,jvm就會將異常資訊封裝成相應的異常物件,
                                    然後轉移到catch(){}程式碼塊中進行處理,執行{}中的業務邏輯。
                                    最後會執行finally模組的程式碼。
                          ②如果try{}中沒有異常出現,最後也會執行finally模組 中的邏輯。 
 
         4:catch程式碼塊:
                    ①數量上:可以有1個或多個, 
                    ②執行順序: 從上到下的catch塊使用的異常型別可以是同級別的;
                        如果多個異常型別有父子關係時,那麼應該先寫子異常,再寫父異常。
                      (先寫父異常時,編譯不通過
)先處理子型別異常,再處理父型別異常。

       5:finally程式碼塊:
                    ①finally程式碼塊是有沒有異常都會執行的,最後執行。
                    ②通常用於關閉某些操作,刪除臨時檔案等;
                    ③不管try有沒有異常當程式中有return關鍵字的時候, 先執行return,再執行finally程式碼塊
        6:throw : 丟擲異常物件。
                    概念:有時候,程式中捕獲的異常,不想在catch程式碼塊中處理。
            就要往外丟擲,拋給呼叫者(誰呼叫這個方法誰就是呼叫者)
            由呼叫者來處理(需要try/catch),main中的異常最好直接處理。   

        7:throws:
                     在定義方法時,
必須宣告要丟擲的異常物件的型別
                      throws:就是宣告通知呼叫要處理的異常型別  ,在定義方法處宣告丟擲的異常型別.
                      throw :丟擲異常物件,拋給呼叫者(方法),讓呼叫者處理.
                  
                         如果throw是執行時異常,可以不用 throws
                         如果throw是編譯時異常,必須使用 throws
                         throw new 一個異常物件:
                                         throw new NullPointerException();


         8:異常的分類 :
                   ①檢查性異常(編譯時異常)
                            reg:IO異常
                   ②非檢查性異常(執行時異常)
                            reg:
                                    NullPointerException
                                    ArrayIndexOutOfBoundsException
                                    StringIndexOutOfBOundsException
                                    ClassCastException  //類造型異常
                                    NumberFormatException//數字異常
                                    IllegalArgumentsException//非法引數異常
                 不要把ClassNotFoundException當成執行時異常
           在throw執行時異常物件時,方法處不需要宣告throws,因為編譯器 會忽略執行時異常。
           當throw編譯時異常時,必須在方法處宣告throws此物件的型別。
        9:當父類中的方法宣告異常時,子類重寫方法時可以不宣告,也可以宣告;
               父類中方法不宣告異常,子類不能宣告異常;
        10:自定義異常。只需要繼承Exception,用系統提供的構造器即可。

二、子類異常繼承父類

   ***子類重寫父類方法時,如果父類的方法聲明瞭異常:
          1)子類方法可以不宣告該異常;
          2)可以按父類的方法進行宣告;
          3)也可以宣告父類方法的異常的子型別異常;
             *不能宣告父類方法異常的父型別
           例如:public double distance()throws Exception{
           //程式碼塊  
                 }
           4)父類的方法如果沒有宣告異常 , 子類方法不可以宣告異常