1. 程式人生 > >Java的異常Exception----(最簡單明瞭的總結)

Java的異常Exception----(最簡單明瞭的總結)

1、什麼是異常?       程式開發和執行過程中會出現編譯錯誤執行錯誤。編譯錯誤容易被發現並排除,而執行錯誤(邏輯錯誤異常)很難預料。因此為了程式的穩定性和可靠性,就需要對程式異常處理和保護。異常( Exception ):正常程式流程所不能處理或者沒有處理的異常情況或異常事件2、為什麼要使用異常?       傳統的程式設計中會像下面的虛擬碼形式來處理錯誤:執行一個任務

          if   前一個任務未能正確執行

               執行錯誤處理

              執行下一個任務

         if   前一個任務未能正確執行

             執行錯誤處理

而這樣只會讓程式更加複雜!
3、異常的分類          <1>根據異常在編譯時是否被檢測來分,異常可以分為兩類:受檢異常(CheckedException)非受檢異常(UncheckedException)          <2>非受檢異常不能在編譯時檢測到非受檢異常包括執行時異常(RuntimeException)和錯誤(Error) 錯誤指的是致命性錯誤,常常無法處理。          <3>根據異常的嚴重性,可以分為可以處理的異常錯誤異常           異常以類的形式封裝。程式可以處理的異常對應的類是java.lang.Exception及其子類。           執行時異常
對應的類是java.lang.RuntimeException
           錯誤異常對應的類是java.lang.Error4、異常相關類的繼承圖5、異常的產生 <1>可以由Java虛擬機器在執行程式時自動發現併產生異常        <2>也可以在程式中顯式地生成異常,這種方法稱為丟擲異常(ThrowExceptions)。丟擲異常採用throw語句,格式如下:
throw new ArithmeticException( );
或者:
ArithmeticException e=new ArithmeticException( );
throw e;

6、異常的處理 <1>捕捉異常(try_catch_finally語句)
try{
    //可能產生異常的語句;
}catch(Exception1 e1){
    //處理語句1;
}catch(Exception2 e2){
    //處理語句2;
}finally{
    //語句序列;
}
/*
1)catch語句塊可以有多個;
2)catch語句塊和finally語句塊可以同時存在,也可以只有其一;
3)如果發生異常,則會跳轉到捕捉對應異常的catch語句塊,發生異常語句之後的語句序列不會被執行。
4)不管異常是否發生,finally語句塊總是會被執行,除非碰到強制退出程式的System.exit(0)語句;
5)如果try語句塊或catch語句塊中有return語句,則會執行完finally語句塊再執行返回。
*/
        一個demo:  
public class J_ExceptionCatch
{
    public static void main(String args[ ])
    {
        try
        {
            System.out.println("try語句塊");
            throw new Exception( );
        }
        catch(Exception e)
        {
            System.err.println("catch語句塊");
            e.printStackTrace( );
        }
        finally
        {
            System.out.println("finally語句塊");
        } // try-catch-finally結構結束
    } // 方法main結束
} // 類J_ExceptionCatch結束

/*執行流程:
1.try語句塊捕捉throw的異常
2.跳轉到相關的catch語句塊
3.最後執行finally語句塊的內容
*/
        <2>throws丟擲異常
public class Test{
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("a.txt"); 
    }
}
//上面的main方法throws了IOException,宣告但不去處理,所以在執行之後,
//該異常就會交給JVM處理,程式一旦遇到該異常,就會列印該異常的跟蹤棧資訊
//並結束程式

7、自定義異常
public class NewException extends Exception{
    //自定義的異常類    
    public NewException (msg){
        super(msg);
    }
}
//第一種用法:直接在一個判斷語句下throw該異常
public class Test{
    public static void main(String[] args){
        if(條件){
           throw new NewException("我是丟擲的新異常!"); 
        }
    }
}
//第二種:throws之後,再try——catch
public static void test()throws NewException{
    if(條件){
        throw new NewException("我是丟擲的新異常!"); 
    }
}
public class Test{
    public static void main(String[] args){
        try{
            test();
        }catch(NewException e){
            System.out,println(e.getMessage());
        }
    }
}
---------本人為小白,歡迎評論指正錯誤,一起進步!