java - java中自定义异常中的父类(super class)构造函数

标签 java constructor superclass

我正在学习 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/

相关文章:

java - 在 JUnit 5 中,如何在所有测试之前运行代码

c++ - 创建简单链表时无法访问内存

java - 从c到java,对象

java - 重写父类(super class)非抽象方法。访问父类(super class)中的私有(private)属性(?)

java - 错误 : org. hibernate.hql.internal.ast.ErrorCounter - 第 1:45 行:意外标记:从表中获取最后一条记录时的 DESC

Java - 在 Jframe 中显示网页

java - WAS 6 和 JBOSS EAP 6.1 之间的 JMS 通信

class - 为什么我可以将方法标记为隐式而不是构造函数?

c++ - 构造函数中的 vector<unique_ptr<A>> - 错误 : call to implicitly-deleted copy constructor

java - Java 的父类(super class)和子类