因為項目中會出現特有的問題,而這些問題並未被java所描述並封裝對象,所以對於這些特有的問題可以按照java的對問題封裝的思想,將特有的問題,進行自定義的異常封裝。
自定義異常:
需求:在本程序中,對於除數時-1,也視為u是錯誤的是無法進行運算的,那么就需要對這個問題進行自定義的描述。
當在函數內部出現了throw拋出異常對象,那么必須要給對應的處理動作:
要么在內部try catch處理,要么在函數上聲明讓調用者處理。
一般情況下,函數內出現異常,函數上需要聲明。
發現打印結果中只有異常的名稱,卻沒有異常的信息:
因為自定義的異常並未定義信息。
如何定義異常信息呢?
因為父類中已經把異常信息的操作都完成了。所以子類只要在構造時,將異常信息傳遞給父類通過super語句,那么就可以直接通過getMessage方法獲取自定義的異常信息。
自定義異常:
必須是自定義類繼承Exception
繼承Exception原因:
異常體系有一個特點:因為異常類和異常對象都被拋出。他們都具備可拋性,這個可拋性是Throwable這個體系中獨有特點。只有這個體系中的類和對象才可以被throws和throw操作
package com.dreamy.day04; /** * @author dreamy * 需求:在本程序中,對於除數時-1,也視為u是錯誤的是無法進行運算的, * 那么就需要對這個問題進行自定義的描述。 */ /*class Throwable{ private String message; public Throwable(String message) { this.message=message; } public String getMessage() { return message; } } class Exception extends Throwable{ public Exception(String message) { super(message); } }*/ class FuShuException extends Exception {//getMessage(); private int value; public FuShuException() { super(); } public FuShuException(String msg,int value) { super(msg); this.value=value; } public int getValue() { return value; } } class Demo02{ int div(int a,int b) throws FuShuException{ if(b<0) { throw new FuShuException("出現了除數是負數的情況",b);//手動通過throw關鍵字拋出一個自定義異常對象。 } return a/b; } } public class ExceptionDemo02 { public static void main(String[] args) { Demo02 d=new Demo02(); try { int x=d.div(4, -1); System.out.println("x:"+x); }catch (FuShuException e) { System.out.println(e.toString()); // System.out.println("除數出現負數了"); System.out.println("錯誤的負是:"+e.getValue()); } System.out.println("over"); } }