本文正在参加「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…