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.Error

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處理,程式一旦遇到該異常,就會列印該異常的跟蹤棧資訊
//並結束程式