我遇到了這個問題。
我創建了一個CatHandler帶有3內部類(ExceptionAlpha extends Exception、ExceptionBeta extends ExceptionAlpha、ExceptionGammer extends ExceptionBeta)的類。這三個例外子類是空的;它們不包含任何代碼。所有代碼都應該用CatHandler.
現在的問題是撰寫一些代碼CatHandler來顯示ExceptionBeta并ExceptionGammer會被捕獲在型別的 catch 塊中ExceptionAlpha?
對于輸出,我們可以使用System.err.println(),getMessage()和printStackTrace()其他適當的列印陳述句來顯示例外子類已被成功捕獲。
我想知道如何表明例外處理是以這種方式發生的?這真的很令人困惑。
public class CatHandler {
class ExceptionAlpha extends Exception {
}
class ExceptionBeta extends ExceptionAlpha {
}
class ExceptionGammer extends ExceptionBeta {
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
uj5u.com熱心網友回復:
問題是在 CatHandler 中撰寫一些代碼來顯示 ExceptionBeta 和 ExceptionGammer 將被捕獲在 ExceptionAlpha 型別的 catch 塊中。
首先,您需要宣告一些會拋出 ExceptionBeta和的方法ExceptionGamma。
因為它們都是檢查例外,你應該在方法宣告中包含一個throws 子句。
最好將所有嵌套類定義為static,否則這些例外將始終需要一個物件封閉類(即CatHandler)才能被實體化。
中的代碼main()呼叫不安全行為并使用catch期望的塊ExceptionAlpha或其子型別來處理它。
為了演示捕獲的例外的實際型別,我們可以從其物件中提取類名Class或列印堆疊跟蹤(類名將在堆疊跟蹤的開頭提到)。這兩個選項如下所示。
public class CatHandler {
public void m1() throws ExceptionBeta {
throw new ExceptionBeta();
}
public void m2() throws ExceptionGamma {
throw new ExceptionGamma();
}
public static class ExceptionAlpha extends Exception{}
public static class ExceptionBeta extends ExceptionAlpha {}
public static class ExceptionGamma extends ExceptionBeta {}
public static void main(String[] args) {
CatHandler catHandler = new CatHandler();
try {
catHandler.m1();
} catch (ExceptionAlpha e) {
System.out.println("Class name: " e.getClass().getSimpleName());
e.printStackTrace();
}
try {
catHandler.m2();
} catch (ExceptionAlpha e) {
System.out.println("Class name: " e.getClass().getSimpleName());
e.printStackTrace();
}
}
}
輸出
Class name: ExceptionBeta
Class name: ExceptionGamma
_ path _.CatHandler$ExceptionBeta
at _ path _.CatHandler.m1(CatHandler.java:6)
at _ path _.CatHandler.main(CatHandler.java:36)
_ path _.CatHandler$ExceptionGamma
at _ path _.CatHandler.m2(CatHandler.java:10)
at _ path _.CatHandler.main(CatHandler.java:42)
uj5u.com熱心網友回復:
在每個例外中覆寫getMessage以回傳不同的東西。多型性將允許ExceptionAlpha捕獲它的子類,然后使用各自的特定實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449896.html
