Java中的自定义异常类(附带实例)
尽管利用 Java 提供的异常类型已经可以描述程序中出现的大多数异常情况,但是有时候程序员还是需要自己定义一些异常类,来详细地描述某些特殊情况。
自定义的异常类必须继承 Exception 类或者其子类,然后可以通过扩充自己的成员变量或者方法,以反映更加丰富的异常信息以及对异常对象的处理功能。

图 1 Java内置异常类
在程序中自定义异常类,并使用自定义异常类,可以按照以下步骤来进行:
【实例】自定义异常类 TooHigh,如果成绩小于 0 则抛出一个数据太小的异常。自定义异常类 LowHigh,如果成绩大于 100 则抛出一个数据太大的异常。然后在测试类中捕获两类不同的异常。
自定义的异常类必须继承 Exception 类或者其子类,然后可以通过扩充自己的成员变量或者方法,以反映更加丰富的异常信息以及对异常对象的处理功能。

图 1 Java内置异常类
在程序中自定义异常类,并使用自定义异常类,可以按照以下步骤来进行:
- 创建自定义异常类;
- 在方法中通过 throw 抛出异常对象;
- 若在当前抛出异常的方法中处理异常,可以使用 try…catch 语句捕获并处理,否则在方法的声明处通过 throws 指明要抛给方法调用者的异常,继续进行下一步操作;
- 在出现异常的方法调用代码中捕获并处理异常。
【实例】自定义异常类 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