Java異常簡介------Exception And Err等

標題# Java異常簡介------Exception And Err等之處理機制

Java異常的概念:

沒有按照原定的計劃進行,發生了特殊狀況,異常機制提供了程序退出的安全通道,當出現錯誤後,程序執行的流程發生改變,程序的控制權轉移到異常處理器.

異常的分類:

在這裏插入圖片描述

上圖簡單的展示了一下異常的結構圖,但不是所有的異常,具體的可以查看api文檔,還可以自定義異常

Throwable:是Java中所有錯誤或異常的超類,有兩個重要的子類:Error(錯誤)和Exception(異常)

Error(錯誤):表示Java中的錯誤,一般是運行環境(jar包,依賴)等出了問題,是程序無法處理的錯誤,大多數與代碼編寫者的執行操作無關.在這裏插入圖片描述

Exception(異常):是Throwable的一種形式,它指出了合理的應用程序想要捕獲的條件,是程序本身可以處理的異常.
Exception分爲兩大類:運行時異常和非運行時異常(編譯異常)
1.運行時異常:RuntimeException類及其子類異常,這些異常時不檢查異常,程序可以選擇捕獲,也可以選擇不處理,一般是由程序邏輯錯誤引起的,常見的運行時異常有:

NullPointerException:當應用程序試圖在需要對象的地方使用 null 時,拋出該異常
IndexOutOfBoundsException:下標越界異常,指示某排序索引(例如對數組、字符串或向量的排序)超出範圍時拋出
ClassNotFoundException:類找不到異常

2.非運行時異常(編譯異常):是RuntimeException以外的異常,類型都是Exception類及其子類,對於非運行時異常,Java編輯器強制要求,我們必須對這些異常進行處理,否則程序不能編譯通過,常見的有:

IOException:io異常
SQLException:MySQL數據庫引起的異常

以上異常知識簡單的舉例了幾個,僅供參考,具體情況,請在代碼中具體分析

異常的處理機制

1.使用throw關鍵字拋出異常

throw new 異常信息:(手動製造一個異常)

當需要指定運行異常時,可以在發生異常的時候,使用throw new RuntimeException(msg)
注:msg自定義的異常信息

學到就要用到,來上實例:

public class ThrowException {
	public static void main(String[] args) {
		Scanner key = new Scanner(System.in);
		System.out.println("請輸入年齡");
		int age = key.nextInt();
		if(age<=0){
			throw new RuntimeException("你還沒出生,趕緊回去別捉妖");
		}
		System.out.println(age);
		key.close();
		
	}
}

在這裏插入圖片描述

2.使用throws關鍵字拋出異常

使用throws關鍵字拋出異常:
在方法或類的後面加上throws XXXException(代表對應發生的異常)
throws:拋出得意思,表示將異常拋給上級(調用者)處理
如果是加在main方法得後面,表示交給Java虛擬機去處理異常

public class IODemo01 {
	public static void main(String[] args) throws IOException {
		File file = new File("D:\\我很帥.txt");
		file.createNewFile();
	}
}

在這裏插入圖片描述

現在報錯提示我們有異常,要麼拋出,要麼捕獲,我們這裏選擇throws拋出,也就是對應的第一個選項Add throws declaration

3.捕捉處理異常:try…catch代碼塊

表示:當try中的語句發生異常時,會先到第一個catch中來查找是否發生了第一個異常,如果不是第一個就繼續往下找,看是否是異常2,當處理完之後直接結束try…catch語句

格式1爲:

try{

​ 被捕捉的代碼

}catch(異常類型 e){

​ 對異常的處理

}

格式2爲:

try{

語句1;

語句2;

}catch(異常類型1 e){

對異常的處理1

}catch(異常類型2 e){

對異常的處理2

}catch(異常類型3 e){

對異常的處理3

}

注意:當一個異常同時可以被多個catch捕獲時,會採用就近原則,會選擇與這個異常最相近的catch去執行

當多個catch語句中的異常時父子關係時,應將子異常寫在前面。父異常寫在後面
即:範圍小的異常寫在前面,範圍大的異常寫在後面

這裏還拿剛纔的例子來簡單的說明:

public class IODemo01 {
	public static void main(String[] args){
		File file = new File("D:\\我很帥.txt");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在這裏插入圖片描述

現在咱們選擇第二個Surround with try/catch

3.1 finally代碼塊

**finally:**無論異常是否發生都會執行的代碼塊(根據需要,不是必須)

來看格式:

try{

語句1;

語句2;

}catch(Exception e){

對異常的處理

}finally{

最後一定會執行的代碼;

比如我們使用完某個資源爲了防止浪費,最後一定要關閉,操作中途可能有異常導致程序中斷,但
是並不影響資源的關閉

}

來看代碼,咱們故意寫一個異常來看效果:

public class ExceptionDemo06 {
	public static void main(String[] args) {
		try {
			System.out.println("打開連接池");
            //在數學裏面0不可以做爲被除數的,所以這裏會報異常:java.lang.ArithmeticException
			int a = 2/0;
			System.out.println("pilipal");
			System.out.println("劈里啪啦工作中");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("關閉連接池");
		}

在這裏插入圖片描述

好了,本期異常就說到這裏了,如果對異常或者其他有不懂的地方,歡迎前來加我微信進行探討

看完別忘記點贊哦
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章