天天看點

Java 異常機制

異常的概念: 所謂的異常通俗講就是由于種種原因 導緻程式沒有按照正常的邏輯執行。

             而這些因素有些是可以預料和排除的 而有些則是緻命和不可預知

             Java為盡可能降低這些因素對程式的影響推出了這套異常機制

             通過異常類将錯誤的資訊傳回 根據異常資訊恢複正常邏輯或講資訊輸出

     作用:   增強程式的健壯性 也便于程式設計人員發現解決問題

異常分類:   錯誤 和 異常(運作異常 和檢查異常)其實這種分發有點勉強和歧義

            (錯誤 也是運作異常的一種隻是字面上差別(主要用于嚴重錯誤)

             Error   RuntimeException  Exception Throwable 

             其中Error  RuntimeException 屬于運作異常

             Exception  Throwable 屬于檢查異常 其中Throwable 是所有異常類的父類

各類異常差別 

          :  運作異常  是在程式運作期間發生的異常  

                       不需要在程式中顯示捕獲(try catch)

             檢查異常  則是在編譯期間(寫程式時)自動檢查

                       一旦方法中有異常抛出則需要捕獲或 抛出否則編譯不通過

                       這個便是兩個異常本質差別 其它基本沒有什麼差別  

自定義異常 : 繼承 Throwable  Exception  RunTimeException  Error

異常連結   : 當捕獲某一個異常之後需要抛出另外一個新異常而又想儲存上一個異常的資訊

             可以通過把上一個異常指派給新異常的屬性cause 則在輸出新異常的同時

             也會把上一個異常輸出(Throwable中有這個屬性 并提供了對應的構造器構造器或)

             如

                public class TestException extends Exception {

                    publicTestException(Throwable e){

                        super(e);

                    } 

                }

                try{

                   .....

                }catch(NuLLPointException e){

                     throw newTestException(e);

                     或

                     throw new newTestException().initCause(e);

更新異常堆棧 : e.fillInStackTrace() 這個方法主要用于當捕獲一個異常

                并抛出這個異常 可以通過這個方法将異常抛出點更新為目前行

try-catch-finally : 

  try{

                     .....異常監視區

                    }catch(NuLLPointException e){

                       處理異常

                    }finally{

                       無論是否有異常 都要執行代碼塊

                       也可以這樣用try{}finally{}

                    }

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍