Exception的異常分類與處理


一、 異常:  
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)父類的方法如果沒有聲明異常 , 子類方法不可以聲明異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM