Java之今天的異常處理了嗎

異常:指在程序運行過程當中發生的異常事件,好比除0溢出、數組越界、文件找不到等,這些事件的發生將阻止程序的正常運行。java

(這裏須要注意,異常字面上的意思就是異於日常的錯誤,這裏要和程序自己的設計錯誤區別開。筆者開始的時候一直在想若是一開始就知道程序會發生錯誤爲啥還要執行它,不該該從新設計程序麼?)數組

 

異常發生後,Java會經過面向對象的方法來處理異常,也就是要把錯誤包裝成對象(這些對象都是可拋出的,即throw)。而後系統會在方法的調用棧中查找,從生成異常的方法開始回溯,直到找到相應的異常處理方法,這一過程稱爲捕獲(catch)一個異常。測試

 

如今咱們來看系統會拋出哪些異常:spa

在Java中,異常都繼承自java.lang.Throwable類,它有兩個直接子類:Error和Exception設計

1.Error類對象(如動態鏈接錯誤、硬件層面錯誤、JVM錯誤或內存不足等),由JVM生成並拋出。一般,Java程序不對這類異常進行處理,通常應用程序都無力迴天。對象

 

2.Exception類對象,也就是咱們一般看到的使用try、catch處理的錯誤,因此一般稱錯誤處理爲異常處理(Exception handling)。它又分爲運行時異常(Runtime Exception),表明運行時由Java虛擬機生成的異常,如算術運算異常ArithmeticException、數組越界異常ArrayIndexOutOfBoundsEXception等;其餘則爲非運行時異常,如輸入輸出異常IOException等。 Java編譯器要求Java程序必須捕獲或聲明全部的非運行時異常,但對運行時異常能夠不作處理。繼承

 

發生異常以後,處理方式有如下幾種:事件

對運行時異常能夠不作處理;使用try-catch-finally語句捕獲異常;經過throws子句聲明異常,還能夠定義本身的異常類,並用throw語句來拋出它。內存

 

1.運行時的異常:程序在運行時檢測到,它可能在程序的任意部位發生,並且其數目可能很大,此時系統會把生成的異常對象交給默認的異常處理程序,在標準輸出上顯示異常的內容以及發生異常的位置。資源

 

2.捕獲異常,即try-catch-finally:

                    try{

                          Java statements

                         }catch(ExceptionType1 ExceptionObject){

                             Exception Handling

                              }catch(ExceptionType2 ExceptionObject){

                                           Exception Handling

                                                 }.....

                                                   }finally{

                                                                 final Handling

                                                                }

try後用大括號{}指定一段代碼,表示該段代碼可能會拋出一個或多個異常;

catch語句的參數相似方法的聲明,包括一個異常類型和一個異常對象。,catch語句能夠有一個或多個,並且至少有一個catch語句或finally語句

finally語句可指定一塊代碼,不管try指定的程序拋不拋出異常,也無論catch語句的異常類型是否與所拋出的異常的類型一致,finally所指定的代碼都要被執行,它提供了統一的出口。

 

3.異常的拋出:經過throw語句來實現,格式爲throw ThrowableObject;

其中ThrowableObject必須爲Throwable類或其子類的對象。

也能夠定義本身的異常類,並用throw語句來拋出它。關於throw的和throws的用法有不少值得去講的,筆者也會在下一篇中詳細描述。

 

總的看來,Java的異常處理機制把異常事件看成對象來處理,利用類的層次性能夠把多個具備相同父類的異常統一處理,也能夠區分不一樣的異常分別處理,使用靈活 。

 

但建議:1.異常控制的設計宗旨並非用來代替一些簡單的測試

2.不要過度細化異常,以避免形成資源浪費。

3.不要關閉異常

4.對於自定義的異常類,一般把它做爲Exception類的子類,而非Error類的子類。且定義類名時常以Exception結尾。

 

對於異常處理機制的使用值得多思考,要作到在恰當的時候使用恰當的異常處理方式,而這些都是在實踐總結的基礎上才能獲得本身的經驗啦!

相關文章
相關標籤/搜索