Java異常處理總結

1、Java 異常繼承框架

Error:

Error類對象由 Java 虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操做無關。對於設計合理的應用程序來講,即便確實發生了錯誤,本質上也不該該試圖去處理它所引發的異常情況。java

Exception:

在Exception分支中有一個重要的子類RuntimeException(運行時異常),這些異常是不檢查異常,程序中能夠選擇捕獲處理,也能夠不處理。這些異常通常是由程序邏輯錯誤引發的,程序應該從邏輯角度儘量避免這類異常的發生;而RuntimeException以外的異常咱們統稱爲非運行時異常,類型上屬於Exception類及其子類,從程序語法角度講是必須進行處理的異常,若是不處理,程序就不能編譯經過。程序員

注意
Error和Exception的區別:Error一般是災難性的致命的錯誤,是程序沒法控制和處理的,當出現這些異常時,Java虛擬機(JVM)通常會選擇終止線程;Exception一般狀況下是能夠被程序處理的,而且在程序中應該儘量的去處理這些異常。
♠提示
除了RuntimeException及其子類之外,其餘的Exception類及其子類都屬於檢查異常,當程序中可能出現這類異常,要麼使用try-catch語句進行捕獲,要麼用throws子句拋出,不然編譯沒法經過。
♠提示
對於運行時異常、錯誤和檢查異常,Java技術所要求的異常處理方式有所不一樣。
因爲運行時異常及其子類的不可查性,爲了更合理、更容易地實現應用程序,Java規定,運行時異常將由Java運行時系統自動拋出,容許應用程序忽略運行時異常。
對於方法運行中可能出現的Error,當運行方法不欲捕捉時,Java容許該方法不作任何拋出聲明。由於,大多數Error異常屬於永遠不能被容許發生的情況,也屬於合理的應用程序不應捕捉的異常。
對於全部的檢查異常,Java規定:一個方法必須捕捉,或者聲明拋出方法以外。也就是說,當一個方法選擇不捕捉檢查異常時,它必須聲明將拋出異常。

2、異常處理原則

異常處理語法

try{
    //code that might generate exceptions    
}catch(Exception e){
    //the code of handling exception1
}catch(Exception e){
    //the code of handling exception2
} finally {
}

一個例子:框架

public class Ex1 {
 
    public static void main(String[] args) {
        try{
        System.out.println(Ex1.getResult());
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("截獲異常catch");
        }finally{
            System.out.println("異常處理finally");
        }
    }
 
    public static int getResult() throws Exception{
        int a =100;
         
        try{
             
            a=a+10;
            throw new RuntimeException();
        }catch(Exception e){
            System.out.println("截獲異常並從新拋出異常");
            throw new Exception();           
        }finally{
            return a;
        }
    }
}

輸出以下:編碼

截獲異常並從新拋出異常
110
異常處理finally線程

「截獲異常catch」卻沒有執行!
緣由是在getResult()的finally中return一個值,等同於告訴編譯器該方法沒有異常,但實際上異常是有的,這樣的結果是該方法的調用者卻捕獲不到異常,不要再finally中試圖return一個值,這樣可能會致使一些意想不到的邏輯錯誤,finally就是用來釋放資源的!設計

注意:在finally中改變返回值的作法是很差的,由於若是存在finally代碼塊,try中的return語句不會立馬返回調用者,而是記錄下返回值待finally代碼塊執行完畢以後再向調用者返回其值,而後若是在finally中修改了返回值,就會返回修改後的值。顯然,在finally中返回或者修改返回值會對程序形成很大的困擾,C#中直接用編譯錯誤的方式來阻止程序員幹這種齷齪的事情,Java中也能夠經過提高編譯器的語法檢查級別來產生警告或錯誤,Eclipse中能夠在如圖所示的地方進行設置,強烈建議將此項設置爲編譯錯誤。

3、總結

Java的異常處理的知識點雜並且理解起來也有點困難,這裏給你們總結了如下幾點使用java異常處理的時候,良好的編碼習慣:code

一、處理運行時異常時,採用邏輯去合理規避同時輔助try-catch處理對象

二、在多重catch塊後面,能夠加一個catch(Exception)來處理可能會被遺漏的異常blog

三、對於不肯定的代碼,也能夠加上try-catch,處理潛在的異常繼承

四、儘可能去處理異常,切記只是簡單的調用printStackTrace()去打印

五、具體如何處理異常,要根據不一樣的業務需求和異常類型去決定

六、儘可能添加finally語句塊去釋放佔用的資源

相關文章
相關標籤/搜索