小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
1.常见的异常类
算术异常:ArithmeticExecption
类型强制转换异:ClassCastException
数组下标越界异:ArrayIndexOutOfBoundsException
操作数据库异常:SQLException
方法未找到异常:NoSuchMethodException
输入输出异常:IOException
空指针异常类:NullPointerException
2.查看一个异常类源码(以NullPointerException 为例子)
public class NullPointerException extends RuntimeException {
private static final long serialVersionUID = 5162710183389028792L;
public NullPointerException() {
}
public NullPointerException(String s) {
super(s);
}
}
public class RuntimeException extends Exception {
static final long serialVersionUID = -7034897190745766939L;
public RuntimeException() {
}
public RuntimeException(String message) {
super(message);
}
public RuntimeException(String message, Throwable cause) {
super(message, cause);
}
public RuntimeException(Throwable cause) {
super(cause);
}
protected RuntimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
上面的这个异常是RuntimeException的子类,所以他是非检查异常类,他一般在编译时能过但是在代码运行过程中会出现异常,而我们一般自定义的异常是非检查类异常,需要继承RuntimeException.因此根据上面这个例子 我们自己来编写自定义的异常类,以使得我们在开发过程中写适合需求的异常类
3.自定义异常
(在上面你继承Exception也是可以的)自定义异常在我们日常开发中有时是需要的,这里我自定义了一个用户异常类,在抛出异常的时候能够灵活自定义错误信息,或者可以同时自定义错误码和错误信息 你也可以重写RuntimeException中的一些方法
public class UserException extends RuntimeException{
private static final long serialVersionUID = 1L;
private String code;
public UserException() {
super();
}
public UserException(String message) {
super(message);
this.code = ResultCode.EXISTING_ASSOCIATED_DATA.getCode();
}
public UserException(String code, String message){
super(message);
this.code = code;
}
public UserException(String message, Throwable cause) {
super(message, cause);
}
public UserException(Throwable cause) {
super(cause);
}
}
顺便提一下 一般处理异常我们有5个关键字:throws在方法上抛出一个异常,throw一般是在一个语句中抛出异常,而try-catch-finally: 将可能要出现异常的代码放入try中,catch 捕获 try 中的异常,并处理,不管有没有异常,finally中的代码都会执行。(finally不是必须)