skywang12345-
https://www.cnblogs.com/skywang12345/p/3544168.html
Java異常(二) 《Effective Java》中關於異常處理的幾條建議
https://www.cnblogs.com/skywang12345/p/3544287.html
Java異常(三) 《Java Puzzles》中關於異常的幾個謎題
https://www.cnblogs.com/skywang12345/p/3544353.html
Java程序在執行過程中所發生的異常事件可分爲兩類:
Error: Java虛擬機無法解決的嚴重問題。如:JVM系統內部錯誤、資源耗盡等嚴重情況。一般不編寫針對性的代碼進行處理。
Exception: 其它因編程錯誤或偶然的外在因素導致的一般性問題,可以使用針對性的代碼進行處理。
Exception又分爲兩種:
unckecked異常:即RuntimeException,運行時異常。
例如:ClassCastException 類型轉換異常
ArrayIndexOutOfBoundsException 數組越界異常
NullPointerException 空指針異常
ArithmeticException 計算異常
。。。
checked異常:編譯時異常。
例如:java.lang.ClassNotFoundException
java.lang.InterruptedException
java.io.FileNotFoundException
java.sql.SQLException
。。。
代碼演示:
/*
*java.lang.ArithmeticException: / by zero
*/
public void NullPointerExceptionTest () {
try {
System.out.println(1/0);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
異常處理方式:
(1)throws方法頭部拋出異常;
(2)throw在方法內部拋出異常;
(3)通過try-catch-finally
無論是throws還是throw,都是向上拋出,如果上級調用仍未處理則繼續拋出,直到被try/catch捕獲處理位置。
而try-catch-finally,要求catch根據具體的異常捕獲最好,finally最終都會被處理,通常是用來釋放資源用的。
第一種方式--throws方法頭部拋出異常:
/**
* @author yto_yh
*
*/
public class TestException090501 {
//try catch
public void NullPointerExceptionTest () {
try {
System.out.println(1/0);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
// throws Exception
public void NullPointerExceptionTest01 ()
throws Exception{
System.out.println(1/0);
}
public void NullPointerExceptionTest02 () throws Exception {
int age = 0;
age = -100;
if(age<0)
{
ArithmeticException e = new ArithmeticException();//創建異常對象
throw e;//拋出異常
}
System.out.println(age);
}
public static void main(String[] args) {
TestException090501 t=new TestException090501();
try {
t.NullPointerExceptionTest02();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}