在Java里面自定义异常类的最简单方法是什么?| Java Debug 笔记

239 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:在Java里面自定义异常类的最简单方法是什么?

I'm trying to define my own exception class the easiest way, and this is what I'm getting: 我尝试以最简单的方式定义我的异常类,这是我写的:

public class MyException extends Exception {}

public class Foo {
  public bar() throws MyException {
    throw new MyException("try again please");
  }
}

这是Java编译器显示的:

cannot find symbol: constructor MyException(java.lang.String)

我感觉这个构造函数应该从java.lang.Exception这个类中继承而来,不是吗?

回答一

不,你不能“继承”非缺省构造函数,你需要在你的类中定义接受String参数的构造函数。通常在你的构造函数中使用super(message)来调用父构造函数。例如,像这样:

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

回答二

package customExceptions;

public class MyException extends Exception{

    public MyException(String exc)
    {
        super(exc);
    }
    public String getMessage()
    {
        return super.getMessage();
    }
}
import customExceptions.MyException;

public class UseCustomException {

    MyException newExc=new MyException("This is a custom exception");

    public UseCustomException() throws MyException
    {
        System.out.println("Hello Back Again with custom exception");
        throw newExc;       
}

    public static void main(String args[])
    {
        try
        {
            UseCustomException use=new UseCustomException();
        }
        catch(MyException myEx)
        {
            System.out.println("This is my custom exception:" + myEx.getMessage());
        }
    }
}

回答三

如果你在Eclipse中使用新建类的对话框,你可以将Superclass属性设置为java.lang.Exception并检查“Constructors from Superclass”,它将生成以下内容:

package com.example.exception;

public class MyException extends Exception {

    public MyException() {
        // TODO Auto-generated constructor stub
    }

    public MyException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

    public MyException(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

}

回答四

如果你继承自Exception类,则必须提供一个以String为参数的构造函数(它将包含错误消息)。

文章翻译自Stack Overflow:stackoverflow.com/questions/3…