java提供了很多个异常类,但是,如果java所提供的异常类无法适当地描述我们所遇到的问题,我们可以自己来创建异常类,所谓的DIY。但在自定义异常类时,因该注意以下几点:
(1)自定义异常需要继承Exception及其子类。
(2)若要抛出自定义的异常对象,使用throw关键字。
(3)若要抛出用户自定义的异常,一定要将所调用的方法定义为可抛出异常的方法。
/*定义了一个喝酒异常
*test1()用来抛出异常
* test2()用来捕获并处理异常
* 在main方法中检验
* */
package unite;
@SuppressWarnings("serial")
public class Drinklot extends Exception{
public Drinklot(){
}
public Drinklot(String message){
super(message);
System.out.println("喝酒别开车");
}
}
public class Div {
public static void main(String[] args) {
Div d = new Div();
d.test2();
}
public void test1() throws Drinklot{
throw new Drinklot("喝酒别开车");
}
public void test2() {
try{
test1();
}
catch( Drinklot e){
e.printStackTrace();
System.out.println("开车别喝酒");
}
}
}
/*运行结果
喝酒别开车
unite.Drinklot: 喝酒别开车
开车别喝酒
at unite.Div.test1(Div.java:48)
at unite.Div.test2(Div.java:52)
at unite.Div.main(Div.java:44)
*/
在自定义异常时,有时会用到子类重写抛出异常(此异常是在父类中声明的)的方法。
子类在重写的方法中可以执行以下操作之一:
(1)子类可以与父类方法抛出相同类型的异常。
(2)子类可以抛出父类方法所抛出的异常的子类。
(3)子类中的方法抛出异常数目可以少于父类中方法所抛出的异常数目,或者不需要抛出任何异常。
这说明了对于异常重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
当重写父类方法,子类在抛出异常声明方面,要满足下面任意一条:
1. 不声明抛出异常。父类函数中,已经声明过了,可以不声明
2. 子类声明的异常必须是父类方法声明那种异常或者其子类的异常。