【问题标题】:demonstrate custom exceptions inheritance java演示自定义异常继承 java
【发布时间】:2016-10-09 15:06:31
【问题描述】:

我被要求演示在自定义异常上使用继承。这是我被问到的: 创建一个名为 MyException 的类: - 使用继承,创建两个异常类:Exception1和Exception2; - 每个类都应该有适当的构造函数,它们在使用时会提供相关的消息,例如分别为“异常 1”和“异常 2”;

所以我创建了 MyException,它继承自 java.lang.Exception:

public class MyException extends Exception{

//default constructor
public MyException() {}

//constructor that accepts a message
public MyException(String message){
    super(message);
}

然后我创建了 Exception1 和 Exception2,但是它们是空的

public class Exception1 extends MyException {

}


public class Exception2 extends MyException {

}

尽管它有效,但我认为我的方法不正确。 这是我如何测试它。

//demonstrate use of custom exceptions
try{
    if(true) {throw new Exception1();}
}catch (Exception1 e){
    System.out.println("exception1 thrown");
}

try{
    if(true) {throw new Exception2();}
}catch (Exception2 e){
    System.out.println("exception2 thrown");
}

我怎样才能正确地做到这一点?我应该在 Exception1 和 Exception2 类中添加什么?

【问题讨论】:

    标签: java exception-handling multiple-inheritance


    【解决方案1】:

    您不应该打印抛出了什么异常,而应该打印Exception.getMessage() 结果,否则在这种情况下,异常有消息是没有意义的。

    try{
        throw new Exception1("This is thrown intentionally");
    }catch (Exception1 e){
        System.err.println(e.getMessage());
    }
    

    您还可以在异常中添加自定义方法或附加消息,或者,例如,它们可以从更具体的异常中扩展(更好的做法)。

    没有比这更多的了。

    自定义异常示例:

    public class MyException extends Exception {
    
     public MyException() {
    
         super();
    
     }
    
     public MyException(String msg){
    
        super(msg);
    
     }
    
     public MyException(String msg, Exception cause){
         super(msg, cause);
     }
    
     public static void main(String[] args) {
    
         try {
    
             throw new MyException();
    
         } catch (Exception e) {
    
             System.err.println(e.getMessage());
         }
     }
    
    }
    

    【讨论】:

    • 谢谢,有道理。但是我没有从 e.getMessage() 得到结果...我像这样设置构造函数: super(message = "Exception1 throw"); ...我在哪里犯错了?
    • 如果你只是调用 e.getMessage() 什么都不会发生,你需要打印它,正如我所展示的。如果你按照我展示的那样做,那么你没有正确构建构造函数。我将提供一个完整的示例。
    • 我正在使用 System.out.println(e.getMessage());我得到空值。如果你能给我一个完整的例子,那就太好了。
    • 已解决:我按照您在第一条评论中的建议添加了/“这是故意抛出的!”现在参数已传递。如果我不传递任何参数,我会得到“null”。谢谢!
    猜你喜欢
    • 2015-10-14
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2016-03-20
    相关资源
    最近更新 更多