我正在学习 java 的功能,包括异常。我正在写一个自定义异常。这就是我正在做的:自定义异常类:
public class ServiceException extends Exception {
private String customMessage;
public ServiceException(String customMessage) {
super(customMessage);
this.customMessage = customMessage;
}
}
主类:
public class Main {
public static void main(String[] args) {
try {
new Main().test();
} catch (Exception e) {
System.out.println("the exception message is " + e.getMessage());
}
}
public void test() throws ServiceException {
try {
int i = 1 / 0;
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
}
}
我知道的就这么多: 如果自定义异常类中没有调用父类(super class)构造函数,则自定义异常中设置的消息不会传递给异常类。但是,如果我的自定义异常类中有一个方法 public String getMessage ,即使没有调用 super,也会打印该消息。抱歉,如果这是一个天真的问题。但我无法理解他的概念。有人可以帮助澄清这个概念吗?
最佳答案
在捕获错误的 main 中,您基本上是将 ServiceException 对象分配给 Exception 引用,即将派生类对象分配给基类引用,因此如果派生类重写了该方法,它将被调用。
被调用的 e.message() 是来自 ServiceException 而不是 Exception,你是对的,当你不调用 super 时,没有数据被传递,数据仅在 ServiceException 类内部,调用的函数也来自 ServiceException 类。
关于java - java中自定义异常中的父类(super class)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20580340/