学科分类
目录
Java基础

自定义异常

Java中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在设计divide()方法时不允许被除数为负数。为了解决这样的问题,Java允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。

接下来通过一个案例来学习自定义异常的创建,如文件1所示。

文件1 DivideByMinusException.java

 1    // 下面的代码是自定义一个异常类继承自Exception
 2    public class DivideByMinusException extends Exception{
 3        public DivideByMinusException (){
 4            super();          // 调用Exception无参的构造方法
 5        }
 6        public DivideByMinusException (String message){
 7            super(message); // 调用Exception有参的构造方法
 8        }
 9    }

在实际开发中,如果没有特殊的要求,自定义的异常类只需继承Exception类,在构造方法中使用super()语句调用Exception的构造方法即可。

既然自定义了异常,那么该如何使用呢?这时就需要用到前面小节讲解的throw关键字,在程序指定位置通过throw关键字抛出自定义的异常对象,然后对抛出的异常进行异常处理。

接下来重新对divide()方法进行改写,在divide()方法中判断被除数是否为负数,如果为负数,就是用throw关键字向调用者抛出自定义的DivideByMinusException异常对象,如文件2所示。

文件2 Example36.java

 1    public class Example36 {
 2        // 下面的方法实现了两个整数相除,
 3         public static int divide(int x,int y) throws DivideByMinusException {
 4            if (y == 0) {
 5                // 使用throw关键字声明异常对象
 6                throw new DivideByMinusException("除数是0");
 7            }
 8            int result = x / y; // 定义一个变量result记录两个数相除的结果
 9            return result;       // 将结果返回
 10        }
 11        public static void main(String[] args) {
 12            try {
 13                int result = divide(4, 0);
 14                System.out.println(result);
 15            } catch (DivideByMinusException e) {
 16                System.out.println("捕获的异常信息为:" + e.getMessage());
 17            }
 18        }
 19    }

运行结果如图1所示。

图1 运行结果

在文件2中,divide()方法通过逻辑判断对除法运算的除数是否为0进行了判断,如果除数为0就使用throw关键字抛出自定义的DivideByMinusException异常对象,然后通过throws关键字抛出异常,并在最后通过try..catch语句捕获异常。从图2可以看出,程序执行后判断出除数为0,抛出了指定的异常信息。

点击此处
隐藏目录