如何显示父异常的 Catch 块也将处理子类
How to show that a Catch block for the Parent-exception will handle subclasses as well
我遇到过这个问题。
我创建了一个 class CatHandler
,其中 3
内部 classes (ExceptionAlpha
extends Exception
, ExceptionBeta
延长 ExceptionAlpha
, ExceptionGammer
延长 ExceptionBeta
) .这三个exception subclasses都是空的;它们不包含代码。所有代码都应该写在CatHandler
.
现在的问题是在CatHandler
中写一些代码来表明ExceptionBeta
和ExceptionGammer
会被ExceptionAlpha
类型的catch块捕获?
对于输出,我们可以使用System.err.println()
、getMessage()
和printStackTrace()
等合适的打印语句来显示exception subclass es 已成功捕获。
我想知道如何显示异常处理以这种方式发生?真是一头雾水。
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
}
}
将每个异常中的 getMessage
改写为 return 不同的内容。多态性将允许 ExceptionAlpha
捕获它的子类,然后使用各自子类的特定实现。
the question is to write some code in CatHandler to show that ExceptionBeta and ExceptionGammer will be caught in the catch block of type ExceptionAlpha.
首先,您需要声明一些方法,这些方法将 throw ExceptionBeta
和 ExceptionGamma
.
因为它们都是检查异常,所以你应该在方法声明中包含一个throws
子句。
最好将所有嵌套的class定义为static
,否则这些异常总是需要一个包含class(即CatHandler
)的对象才能被实例化。
main()
中的代码调用不安全行为并使用 catch
块处理它,期望 ExceptionAlpha
或其子类型。
为了演示捕获异常的实际类型,我们可以从其[=20]中提取class名称 =] 对象或打印堆栈跟踪(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)
我遇到过这个问题。
我创建了一个 class CatHandler
,其中 3
内部 classes (ExceptionAlpha
extends Exception
, ExceptionBeta
延长 ExceptionAlpha
, ExceptionGammer
延长 ExceptionBeta
) .这三个exception subclasses都是空的;它们不包含代码。所有代码都应该写在CatHandler
.
现在的问题是在CatHandler
中写一些代码来表明ExceptionBeta
和ExceptionGammer
会被ExceptionAlpha
类型的catch块捕获?
对于输出,我们可以使用System.err.println()
、getMessage()
和printStackTrace()
等合适的打印语句来显示exception subclass es 已成功捕获。
我想知道如何显示异常处理以这种方式发生?真是一头雾水。
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
}
}
将每个异常中的 getMessage
改写为 return 不同的内容。多态性将允许 ExceptionAlpha
捕获它的子类,然后使用各自子类的特定实现。
the question is to write some code in CatHandler to show that ExceptionBeta and ExceptionGammer will be caught in the catch block of type ExceptionAlpha.
首先,您需要声明一些方法,这些方法将 throw ExceptionBeta
和 ExceptionGamma
.
因为它们都是检查异常,所以你应该在方法声明中包含一个throws
子句。
最好将所有嵌套的class定义为static
,否则这些异常总是需要一个包含class(即CatHandler
)的对象才能被实例化。
main()
中的代码调用不安全行为并使用 catch
块处理它,期望 ExceptionAlpha
或其子类型。
为了演示捕获异常的实际类型,我们可以从其[=20]中提取class名称 =] 对象或打印堆栈跟踪(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)