java異常處理(學習筆記)

異常處理的概念:

異常exception又稱爲例外
java中生聲明瞭很多異常類,每個異常類都代表一種運行錯誤,異常類中包含了該類的運行錯誤信息與處理錯誤的方法
每當java程序運行過程中發生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統會產生一個相應的該異常類的對象,即產生一個異常。

java異常處理機制的優點
1,將異常處理代碼從常規代碼中分離出來:即發生異常的地方可以將異常拋出,拋出到某一個地方統一處理
2,按異常類型和差別進行分組
3,支持自定義異常類
4,將異常信息傳播給調用棧,如果都不處理,則拋出到JVM,JVM輸出錯誤信息並終止程序

異常的分類

按照錯誤的嚴重程度不同,可分爲:
1,錯誤(Error類是所有錯誤的父類)
致命的,程序無法處理
2,異常(Exception類是所有異常的父類)
非致命分,有希望回覆的,可編制程序捕獲和處理

按照是否需要進行異常處理分類,可分爲:
1,非檢查型異常
不期望程序捕獲異常,在方法中不需要聲明處理異常,編譯器也不進行檢查。
繼承自RuntimeException。
不要求捕獲和生命的原因:
(1)RuntimeException在java中頻繁出現。
例如:如果每次使用對象的時候,都必須編寫異常代碼來檢查null引用,則程序會變成一個龐大的try-catch塊
(2)他們表示問題不一定作爲異常來處理。
例如:在除法運算的時候檢查0值,在引用前測試空值,而不使用ArithmeticException。

2,檢查型異常
程序需要聲明捕獲並處理異常

java預定義的一些常見異常:

	非檢查性異常:
		ArithmeticException:整數除法中除數爲0
		NullPointerException:空指針異常,訪問的對象還沒有實例化
		NegativeArraySizeException:創建數組時元素個數是負數
		ArrayIndexOutOfBoundsException:數組下標越界
	檢查性異常:
		ArrayStoreException:程序試圖從數組中存取錯誤類型的數據
		FileNotFoundException:文件沒有找到
		IOException:通常的I/O錯誤

異常處理:

聲明拋出異常:
	將異常使用throws子句將異常拋出到調用方法中,如果所有的方法都拋出了此異常,最後JVM將捕獲它,輸出相關的錯誤信息並終止程序運行。
捕獲異常:
	使用try{}-catch{}塊,try{}中捕獲到異常並進行相應處理
	
捕獲異常的語法:
try{
	可能產生異常的代碼塊
}catch(Exception e){
	常用到兩個處理方法:
	e.getMessage()返回一個字符串,描述發生的異常
	e.printStackTrace ()給出一個方法的調用序列,一直到異常產生的位置
}finally{
	可選塊,不論異常是否發生,finally都會執行,一般用來釋放資源,如數據庫連接
	注意:如果try中有return,則在finally執行結束後才return且finally不改變函數返回值,如果finally中也有return,則函數通過finally返回
}
如果有多個catch塊時,將一般的異常放在後面,特殊異常放在前面,因爲一般異常包含特殊特殊異常

三種生成異常對象的方式:
1,由java虛擬機生成
2,由java類庫中某些類生成
3,在自己寫的程序中生成和拋出異常對象
	自己生成異常對象:寫異常類繼承Exception類定義異常
	自己拋出異常對象:throw new XXXException

自定義異常例子

//定義異常類
public class SmallNumException extends Exception{
	public SmallNumException() {
		super("that number is too big");

	}
}
//使用自定義異常類,拋出異常對象
public class FinallyReturn {
	public static void main(String[] args) {
		int num = getNum();
		System.out.println("最後返回值是" + num);
	}
	private static int getNum(){
		int num = 4;
		try{
			num = num + 1;
			if (num >= 5){
				//拋出自定義的  數字太大異常
				throw new SmallNumException();
			}
			return num;
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章