1. 程式人生 > 資訊 >小米 10 至尊版、小米 11 青春活力版、Redmi Note 9 Pro 推送 MIUI 13 穩定版更新

小米 10 至尊版、小米 11 青春活力版、Redmi Note 9 Pro 推送 MIUI 13 穩定版更新

異常類

一,前言

​ 學習思路,瞭解異常類的概念,掌握異常的分類(Error類和Exception類),瞭解常見的RuntimeException下的子類,掌握異常的處理機制(拋抓語句,宣告拋異,人工拋異),掌握自定義異常類。

二,異常的概念

​ 在Java語言中,將程式執行中發生的不正常情況稱為“異常”。(開發過程中的語法錯誤和邏輯錯誤不是異常)

三,異常的分類

​ Throwable: Error, Exception

1.Error類

​ Error類Java虛擬機器無法解決的嚴重問題。

常見的Error類:StackOverflowError(棧溢位),OutOfMemoryError(堆溢位)

StackOverflowError(棧溢位):

public static void main(String[] args) {
 main(args);
 }

OutOfMemoryError類(堆溢位):

 public static void main(String[] args) {
 	Long[] arr = new Long[1024*1024*1024];
 }

2.Exception類

​ 分為編譯時異常和執行時異常。

編譯時異常:

    • 是指編譯器要求必須處置的異常。即程式在執行時外界因素造成的異常。編譯器要求Java程式必須捕獲或宣告所有編譯時異常。
    • 對於這類異常,如果程式不處理,可能會帶來意想不到的結果。
    • 常見IOExeption等

執行時異常:

    • 是指編譯器不要求強制處置的異常。一般是指程式設計時的邏輯錯誤,是程式設計師應該積極避免其出現的異常。
    • 一般可以不作處理,因為很普遍,若全部處理可能會對程式的可讀性和執行效率產生影響。
    • RuntimeException下的子類都為執行時異常

常見的執行時異常:

//NullPointerException(空指標異常)
 public void test(){
 int[] arr = null;
 System.out.println(arr[1]);
 }
 
//IndexOutOfBoundsException(下標越界異常)
 public void test(){
 //ArrayIndexOutOfBoundsException(陣列下標越界異常)
 Byte[] bytes = new Byte[3];
 System.out.println(bytes[4]);
 }
 
 //ClassCastException(型別轉換異常)
 public void test(){
 Object obj = new Boolean(true);
 String str = (String)obj;
 }
 
 //NumberFormatException(數字格式化異常)
 public void test(){
 String str = "abcd";
 int num = Integer.parseInt(str);
 }
 
//ArithmeticException(算術運算異常)
 public void test(){
 int num1 = 3;
 int num2 = 0;
 int num3 = 3 / 0;
 }

//InputMismatchException(輸入不匹配異常)
 public void test(){
 Scanner scanner = new Scanner(System.in);
 int i = scanner.nextInt();
 System.out.println(i);
 scanner.close();
 }

四,異常的處理機制

​ Java採用異常處理機制,將異常處理的程式程式碼集中在一起,與正常的程式程式碼分開,使得程式簡潔,並易於維護。

1.概念

    • Java提供的是異常處理的拋抓模型。
    • Java程式的執行過程中如出現異常,會自動生成一個異常類物件,該異常物件將被提交給Java執行時系統,這個過程稱為丟擲(throw)異常。
    • 如果一個方法內丟擲異常,該異常會被拋到呼叫方法中。如果異常沒有在呼叫方法中處理,它繼續被拋給這個呼叫方法的呼叫者。這個過程將一直繼續下去,直到異常被處理。這一過程稱為捕獲(catch)異常。
    • 如果一個異常回到main()方法,並且main()也不處理,則程式執行終止。
    • 程式設計師通常只能處理Exception,而對Error無能為力。

2.拋抓語句

​ 異常處理是通過try-catch-finally語句實現的。

try{
	......	//可能產生異常的程式碼
} catch( ExceptionName1 e ){
	......	//當產生ExceptionName1型異常時的處置措施
} catch( ExceptionName2 e ){
	...... 	//當產生ExceptionName2型異常時的處置措施
} [finally{
	......	 //無條件執行的語句
		}]
//catch中常出現有關資訊
String getMessage( ):
	用來得到有關異常事件的資訊
void printStackTrace( ) :
	用來跟蹤異常事件發生時執行堆疊的內容。

3.宣告丟擲異常

  • 宣告丟擲異常是Java中處理異常的第二種方式

  • 如果一個方法中執行時可能生成某種異常,但是並不能確定如何處理這種異常,則此方法應顯式地宣告丟擲異常,表明將不對異常進行處理,而方法呼叫者負責處理。

  • 在方法宣告中用 throws 子句可以宣告丟擲異常的列表,throws後面的異常型別可以是方法中產生的異常型別,也可以是它的父類。

例:

public void readFile(String file)  throws FileNotFoundException {
		// 讀檔案的操作可能產生FileNotFoundException型別的異常
		FileInputStream fis = new FileInputStream(file);
     }

4.人工丟擲異常

​ Java異常類物件除在程式執行過程中出現異常時由系統自動生成並丟擲,也可根據需要人工建立並丟擲

例:

int peach = new Random().nextInt()%7;
if(peach == 0) {
	throw new Exception("message");
	}

五,自定義異常類

​ 使用者自定義異常類MyException,用於描述資料取值範圍錯誤資訊。使用者自己的異常類必須繼承現有的異常類。

例:

class MyException extends Exception {
   	static final long serialVersionUID = 值;
    private int idnumber;
 	public MyException(String message, int id) {
		super(message);
		this.idnumber = id;
 	} 
	public int getId() {
		return idnumber;
 	}
}