yeg*_*256 281 java inheritance exception
我正在尝试以最简单的方式定义自己的异常类,这就是我得到的:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Run Code Online (Sandbox Code Playgroud)
这就是Java编译器所说的:
cannot find symbol: constructor MyException(java.lang.String)
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,这个构造函数必须继承自己java.lang.Exception,不是吗?
djn*_*jna 398
不,您不"继承"非默认构造函数,您需要定义在类中使用String的那个.通常,您super(message)在构造函数中使用它来调用父构造函数.例如,像这样:
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
Run Code Online (Sandbox Code Playgroud)
nan*_*nda 90
我定义的典型自定义异常是这样的:
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable throwable) {
super(message, throwable);
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至使用Eclipse创建一个模板,所以我不必一遍又一遍地写所有的东西.
Kev*_*rey 58
如果在Eclipse中使用新类对话框,只需将Superclass字段设置为java.lang.Exception并检查"超类中的构造函数",它将生成以下内容:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在回答下面关于不调用super()defualt构造函数的问题时,Oracle有这样的说法:
注意:如果构造函数未显式调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用.
小智 19
package customExceptions;
public class MyException extends Exception{
public MyException(String exc)
{
super(exc);
}
public String getMessage()
{
return super.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)