首页 > 编程笔记 > Java笔记 阅读:5

Java中的自定义异常类(附带实例)

尽管利用 Java 提供的异常类型已经可以描述程序中出现的大多数异常情况,但是有时候程序员还是需要自己定义一些异常类,来详细地描述某些特殊情况。

自定义的异常类必须继承 Exception 类或者其子类,然后可以通过扩充自己的成员变量或者方法,以反映更加丰富的异常信息以及对异常对象的处理功能。


图 1 Java内置异常类

在程序中自定义异常类,并使用自定义异常类,可以按照以下步骤来进行:
【实例】自定义异常类 TooHigh,如果成绩小于 0 则抛出一个数据太小的异常。自定义异常类 LowHigh,如果成绩大于 100 则抛出一个数据太大的异常。然后在测试类中捕获两类不同的异常。
public class MyExceptionDemo {
    public static void main(String[] args) {
        MyExceptionDemo med = new MyExceptionDemo();
        try { // 有可能发生 TooHigh 或 TooLow 异常
            med.getScore(105);
        } catch (TooHigh e) { // 捕获 TooHigh 异常
            e.printStackTrace(); // 打印异常发生轨迹
            // 打印详细异常信息
            System.out.println(e.getMessage() + " score is:" + e.score);
        } catch (TooLow e) { // 捕获 TooLow 异常
            e.printStackTrace();
            System.out.println(e.getMessage() + " score is:" + e.score);
        }
    }

    public void getScore(int x) throws TooHigh, TooLow {
        if (x > 100) { // 如果 x > 100,则抛出 TooHigh 异常
            // 创建一个 TooHigh 类型的对象
            TooHigh e = new TooHigh("score>100", x);
            throw e; // 抛出该异常对象
        } else if (x < 0) { // 如果 x < 0,则抛出 TooLow 异常
            // 创建一个 TooLow 类型的对象
            TooLow e = new TooLow("score<0", x);
            throw e; // 抛出该对象
        } else
            System.out.println("Score is:" + x);
    }

    class TooHigh extends Exception {
        int score;
        public TooHigh(String mess, int score) {
            super(mess); // 调用父类的构造方法
            this.score = score; // 设置成员变量的值,保存分数值
        }
    }

    class TooLow extends Exception {
        int score;
        public TooLow(String mess, int score) {
            super(mess);
            this.score = score;
        }
    }
}
程序执行结果为:

TooHigh: score>100
     at Main.getScore(Main.java:19)
     at Main.main(Main.java:5)
score>100 score is:105

相关文章