異常的頂層父類Throwable:繼承它後,檢視内部的方法.包括
package learn.error;
import java.io.Serializable;
import java.util.Objects;
/**
* Throwable異常處理頂層父類:繼承該類的有Error編譯異常,Exception運作時異常. <br>
* 方法會操作堆棧.我們這裡繼承Throwable,介紹Throwable中的方法
*
* @author Administrator
*
*/
public class MyThrowable extends Throwable implements Serializable {
private static final long serialVersionUID = 1L;
/** 異常的詳細資訊 */
private String detailMessage = "詳細資訊";
/** 異常的原因 */
private Throwable cause = this;
/**
* 擷取異常的詳細資訊
*/
@Override
public String getMessage() {
return detailMessage;
}
/**
* 擷取本地化消息
*/
@Override
public String getLocalizedMessage() {
return getMessage();
}
/**
* 擷取異常原因
*/
@Override
public synchronized Throwable getCause() {
return (cause == this ? null : cause);
}
/**
* 初始化異常原因
*/
@Override
public synchronized Throwable initCause(Throwable cause) {
if (this.cause != this)
throw new IllegalStateException("無法覆寫原因 " + Objects.toString(cause, "為null"), this);
if (cause == this)
throw new IllegalArgumentException("不允許自相沖突", this);
this.cause = cause;
return this;
}
@Override
public String toString() {
String s = getClass().getName();
String message = getLocalizedMessage();
return (message != null) ? (s + ": " + message) : s;
}
/**
* System.err列印錯誤資訊
*/
@Override
public void printStackTrace() {
printStackTrace(System.err);
}
// 其他一些操作堆棧的方法就不顯示了
}
而Error中都是一些無參有參構造函數.
public MyError() {
super();
}
public MyError(String message) {
super(message);
}
public MyError(String message, Throwable cause) {
super(message, cause);
}
public MyError(Throwable cause) {
super(cause);
}
protected MyError(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
public class MyException extends Exception {
static final long serialVersionUID = -3387516993124229948L;
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(Throwable cause) {
super(cause);
}
}
而繼承這兩類編譯異常,運作時異常的下級異常類,基本都是調用這兩個類裡的方法來輸出異常資訊或自定義資訊.目的是調用最頂層Throwable來操作堆棧和列印輸出異常資訊.
而Error和Exception類下面的不同子類也是為了區分不同的異常類型與列印資訊,便于程式設計開發人員能快速定位異常出現的原因.
以上概念了解了就可以定義自己的異常處理類來處理異常了.
你可以根據Exception類中的方法仿照這寫一個自己的異常類需要 繼承 Exception. 我上面的就是自定義的異常類.當使用時将處理異常的類選中自定義的即可. eg: throw new MyException("XXX出錯了!");
對異常的處理通常有兩種方法 try catch 捕獲或者 throw 一個異常類往上抛出
try {
throw new IllegalAccessError("調用已有異常類并抛出異常");
} catch (Exception e) {
e.printStackTrace();
System.out.println("try catch異常列印處理或列印到日志log中,或調用自己的異常處理類都需");
} finally {
}