12.4 自定义异常

异常是可以自己定义的,只需要继承异常类RuntimeException就可以,通常用于业务中出现异常现象,而这种异常仅仅在这个业务系统里才有意义,例如一个学籍系统,学生的学号非常重要,但偏偏有可能某些学生的学号有重复,那么可以定义一个学号重复异常。如下面代码所示:
public class StudentIdNotUniqueException extends RuntimeException{
}
1.所有异常都必须继承这个RuntimeException类,它是所有异常的超类。
2.有时候这样一个定义就足够了,不需要任何代码,异常的类型本身就已经是一种信息
如果需要,可以重写下面代码的这两个方法:这两个方法都返回一个String对象,描述这个异常
public class StudentIdNotUniqueException extends RuntimeException{
    @Override 
    public String getMessage(){
        //TODO自动生成的方法存根
        return super.getMessage();
    }
    @Override 
    public String toString(){
        //TODO自动生成的方法存根
        return super.toString();
    }
}
还可以继承Exception,但这类异常必须在方法中声明throws或者直接用catch处理,例如有这样的异常:
public class CodesspException extends Exception{
}
任何方法抛出此异常,必须在方法中用throws声明,否则如下所示出语法错误:
或者用catch处理:
但这样就奇怪了,自己抛出的异常马上要处理,如果是这样又何必用抛出,直接在if语句下处理就可以了,所以一般选择是抛出。