编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

自定义异常

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

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

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

既然自定义了异常,那么该如何使用呢? 这时就需要用到throw关键字,throw关键字用于在方法中声明抛出异常的实例对象,其语法格式如下:

throw Exception 异常对象

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

public class Example {
    public static void main(String[] args) {
        // 下面的代码定义了一个try…catch 语句用于捕获异常
        try {
            // 调用divide()方法,传入一个负数作为被除数
            int result = divide(4, -2);
            System.out.println(result);
        } catch (DivideByMinusException e) { // 对捕获到的异常进行处理
            System.out.println(e.getMessage()); // 打印捕获的异常信息
        }
    }
    // 下面的方法实现了两个整数相除,并使用throws 关键字声明抛出自定义异常
    public static int divide(int x, int y) throws DivideByMinusException {
        if (y < 0) {
            // 使用throw 关键字声明异常对象
            throw new DivideByMinusException("被除数是负数");
        }
        int result = x / y; // 定义一个变量result 记录两个数相除的结果
        return result; // 将结果返回
    }
}

运行结果:

被除数是负数

例的main()方法中,定义了一个try…catch语句用于捕获divide()方法抛出的异常。在调用divide()方法时由于传入的被除数不能为负数,程序会抛出一个自定义异常DivideByMinusException,该异常被捕获后最终被catch代码块处理,并打印出异常信息。


未经允许不得转载: 技术文章 » Java编程 » 自定义异常