java異常的基本概念和處理流程


一、異常的基本概念

在java中把導致程序中斷運行的情況分為兩種,一種就是異常,而另外一種叫做錯誤。所有異常的基類是Exception,錯誤的基類是Error。Exception是在java程序中可以編碼進行控制的,具有可編程性,而Error是指Java運行時系統來顯示與運行時系統本身有關的錯誤,Error對於程序員來說是災難性的,程序無法控制,比如jvm堆棧溢出錯誤,操作系統分配內存錯誤等。不管是Exception還是Error,他們的共同父類是java.lang.Throwable(可拋出的) 類。

異常是指在程序運行期可能出現的非正常情況,這些情況將導致程序出錯,這種出錯不同於代碼編寫錯誤或程序算法出錯,代碼編寫錯誤無法完成編譯,而程序算法出錯計算將取得錯誤的結果。程序出現異常時,缺省會直接造成程序的中斷運行,提前預知這種異常的可能性可以補充異常處理的邏輯,從這個角度出發,異常也是一種行之有效的邏輯處理機制,在程序中聲明異常或主動拋出異常也很常見。

簡而言之,為了提高程序的健壯性,異常需要由程序員處理。

二、異常的作用和處理流程

1、什么時候需要捕獲異常

我們先看看下面的代碼:

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);
    }

 

程序的語法是沒有問題的,但是程序確沒有能正常顯示結果,控制台輸出如下:

程序因為異常而終止,導致程序並沒有輸出,這個異常應該由程序員顯示捕獲,以調程序的健壯性。

2、處理流程和關鍵字介紹

異常處理主要使用的關鍵字是: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("結束。");//這句還是會執行
        }
        
}

 


免責聲明!

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



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