天天看點

自定義異常及RuntimeException-------------黑馬程式員

 (1)因為項目中會出現特有的問題,

  而這些問題并未被java所描述并封裝對象

  是以對于這些特有的問題可以按照java的對問題封裝的思想。

  将特有的問題,進行自定義的異常封裝

 (2) 當函數内部出現了throw抛出異常對象,那麼就必須要給對應的處理動作。

  要麼在内部try catch處理

  要麼在函數上聲明讓調用者處理

  一般情況下,函數内出現異常,函數上需要聲明

 (3) 發現列印的結果隻有異常的名稱,卻沒有異常的資訊,因為自定義的異常并未定義資訊

  因為父類中已經把異常資訊的操作都完成了,是以子類隻要在構造時候,将

  異常資訊傳遞給父類通過super語句

  那麼就可以直接通過getMessage方法獲得異常資訊。

 (4)自定義異常:

  必須是自定義類繼承Exception

 (5)繼承Exception原因:

 異常體系有一個特點:因為異常類和異常對象被抛出,他們都具備可抛型,

 這個可抛型是Throwable這個體系中的獨有特點,

 (6)隻有這個體系中的類和對象可以被throw和throw操作

  a.throws和throw的差別

  throw使用在函數上,

  throw使用在函數内。

  throw後面跟的異常類,可以跟多個,用逗号隔開

  throw 後面跟的是異常對象

 (7)Exception中有一個特殊 的子類異常RuntimeException運作時異常

  如果在函數内容抛出該異常,函數可以不用聲明,編譯一樣通過

  如果在函數上聲明了該異常,調用者可以不用進行處理,編譯一樣通過

 之是以不用在函數聲明,是因為不需要讓調用者處理,當該異常發送,希望程式停止,

  因為在運作時候,出現了無法繼續運算的情況,希望停止程式後,對代碼進行修正

 (8)自定義異常時候:如果該異常的發送,無法在繼續進行運算,

  就讓自定義異常繼承RuntimeException

 (9)對于異常分兩種:

  1.編譯時被檢測的異常

  2.編譯時不被檢測的異常(運作時候異常,RuntimeException以及其子類)

 在本程式中,對于除數是負數,也視作錯誤的,無法進行運算,那麼就需要對這個問題進行自定義的描述

class FuShuException extends RuntimeException {// getMessage
	private int value;

	FuShuException() {
		super();
	}

	FuShuException(String msg, int value) {
		// TODO Auto-generated constructor stub
		super(msg);
		this.value = value;
	}

	public int getValue() {
		return value;
	}

}

class Demo {
	int div(int a, int b) {
		if (b < 0) {
			throw new FuShuException("出現了除數是負數的情況/by 負數", b);// 手動通過throw抛出異常
		}
		if (b == 0) {
			throw new ArithmeticException("被0除了");
		}
		return a / b;
	}
}

public class ExceptionByIden {
	public static void main(String[] args) {
		Demo demo = new Demo();
		int x;
		try {
			x = demo.div(4, -1);
			System.out.println("x = " + x);
		} catch (FuShuException e) {
			System.out.println(e.toString());
			System.out.println("除數出現負數");
			System.out.println("錯誤的負數是:" + e.getValue());
		} catch (Exception e) {
			System.out.println(e.toString());
		}

		System.out.println("over");
	}

}