JDK已有的异常:
- RuntimeException
* NullPointerException
* IndexOutOfBoundsException
* SecurityException
* IllegalArgumentException- NumberOfFormatException
- IOException
* UnsupportedCharsetException,FileNotFoundException,SocketException - ParseException,GeneralSecurityException,SQLException,TimeoutException
当需要抛出异常时,尽量使用JDK已定义的异常类型。如传入的参数不正确,一般使用IllegalArugmentException.
定义新的异常类型: - 从合适的Exception派生
- 从RuntimeException派生
不需要强制捕获自定义的异常,也不需要在方法中声明需要抛出的异常
public class BadFileFormatException extends IOException{}
public class UserNotFoundException extends RuntimeException{}
自定义异常
可以定义新的异常关系树
从适合的Exception派生BaseException
其他Exception从BaseException派生
public class BaseException extends RuntimeException{}
public class UserNotFoundException extends BaseException{}
public class LoginFailedException extends BaseException{}
自定义异常时应该提供多个构造方法
可以直接使用generate-Constructor导入父类的构造的方法
public class BaseException extends RuntimeException {
public BaseException() {
}
public BaseException(String message) {
super(message);
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
public BaseException(Throwable cause) {
super(cause);
}
public BaseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
public class UserNotFoundException extends BaseException {
public UserNotFoundException() {
}
public UserNotFoundException(String message) {
super(message);
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
public UserNotFoundException(Throwable cause) {
super(cause);
}
public UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
总结:
自定义的异常应该从合适的Exception派生
推荐RuntimeException
自定义异常应该提供多个构造方法
可以使用IDE根据父类快速创建构造方法