我试图用最简单的方式定义我自己的异常类,这就是我得到的:

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继承。例外,不是吗?


当前回答

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());
        }
    }
}

其他回答

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

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

不要忘记抛出异常的最简单方法(您不需要创建类)

if (rgb > MAX) throw new RuntimeException("max color exceeded");

异常类有两个构造函数

public Exception()——在没有任何附加信息的情况下构造一个异常。异常的性质通常从类名推断出来。 public Exception(String s)——构造一个带有指定错误消息的异常。详细消息是一个字符串,用于描述此特定异常的错误条件。

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

我定义的一个典型自定义异常是这样的:

public class CustomException extends Exception {

    public CustomException(String message) {
        super(message);
    }

    public CustomException(String message, Throwable throwable) {
        super(message, throwable);
    }

}

我甚至使用Eclipse创建了一个模板,这样我就不必一遍又一遍地编写所有的东西。