1、異常的基本概念java
在java中把致使程序中斷運行的狀況分爲兩種,一種就是異常,而另一種叫作錯誤。全部異常的基類是Exception,錯誤的基類是Error。Exception是在java程序中能夠編碼進行控制的,具備可編程性,而Error是指Java運行時系統來顯示與運行時系統自己有關的錯誤,Error對於程序員來講是災難性的,程序沒法控制,好比jvm堆棧溢出錯誤,操做系統分配內存錯誤等。無論是Exception仍是Error,他們的共同父類是java.lang.Throwable(可拋出的) 類。程序員
異常是指在程序運行期可能出現的非正常狀況,這些狀況將致使程序出錯,這種出錯不一樣於代碼編寫錯誤或程序算法出錯,代碼編寫錯誤沒法完成編譯,而程序算法出錯計算將取得錯誤的結果。程序出現異常時,缺省會直接形成程序的中斷運行,提早預知這種異常的可能性能夠補充異常處理的邏輯,從這個角度出發,異常也是一種行之有效的邏輯處理機制,在程序中聲明異常或主動拋出異常也很常見。算法
簡而言之,爲了提升程序的健壯性,異常須要由程序員處理。編程
2、異常的做用和處理流程jvm
一、何時須要捕獲異常編碼
咱們先看看下面的代碼:spa
public class Cal { public int div(int a, int b) { int result = a / b; return result; } public static void main(String[] args) { Cal cal=new Cal(); int result=cal.div(10, 2); System.out.println("結果:"+result); } }
在這裏咱們設計了Cal類和它的div方法,用於計算兩個數的商,在main方法中咱們調用這個方法,能夠正常的輸出:結果:5;可是若是用戶用下面的代碼調用(注意:除數爲0。)操作系統
public static void main(String[] args) { Cal cal=new Cal(); int result=cal.div(10, 0); System.out.println("結果:"+result); }
程序的語法是沒有問題的,可是程序確沒有能正常顯示結果,控制檯輸出以下:設計
程序由於異常而終止,致使程序並無輸出,這個異常應該由程序員顯示捕獲,以調程序的健壯性。code
二、處理流程和關鍵字介紹
異常處理主要使用的關鍵字是:try、catch、finaly、throw、throws。其功能以下所示:
由上圖可知try、catch、finally經常組合使用,finally是可選的,可是try和catch必須一塊兒使用。其執行流程以下圖所示:
具體語法格式是:
try{
可能出現異常的代碼
}catch(異常類 對象){
出現異常後的處理,若是沒有出現異常,這裏是不會進入的。
}finally{
無論有沒有異常都會在最後執行的代碼。
}
那麼修改上面的main方法。先看看沒有異常時候的輸出。代碼以下:
public static void main(String[] args) { Cal cal=new Cal(); try{ int result=cal.div(10, 2); System.out.println("結果:"+result); }catch (Exception e) { System.out.println("發生異常了。"); }finally{ System.out.println("結束。"); } }
程序並無發生異常,因此catch的後面的語句塊沒有進入了,控制檯輸出以下圖:
修改一下main方法,使除數爲0。
public static void main(String[] args) { Cal cal=new Cal(); try{ int result=cal.div(10, 0);//這一句發生了異常,後面的代碼就不會 System.out.println("結果:"+result);//這句沒有執行 }catch (Exception e) { System.out.println("發生異常了。");//進入了異常處理 }finally{ System.out.println("結束。");//這句仍是會執行 } }