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
ICP备案:
公安联网备案: