自定义异常
使用 Java 内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户只需继承 Exception 类即可自定义异常类。在程序中使用自定义异常类,大体可分为以下几个步骤:
-
创建自定义异常类。
-
在方法中通过 throw 关键字抛出异常对象。
-
如果在当前抛出异常的方法中处理异常,可以使用 try…catch 语句块进行捕获和处理,否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
-
在出现异常的方法的调用者中捕获并处理异常。
【例9.4】如何创建自定义异常(实例位置:资源包\TM\sl\9\4)
在项目中创建 MyException 类,该类继承 Exception 类。实例代码如下:
public class MyException extends Exception { //创建自定义异常,继承Exception类
public MyException(String ErrorMessage) { //构造方法
super(ErrorMessage); //父类构造方法
}
}
字符串 ErrorMessage 是要输出的错误信息。若想抛出用户自定义的异常对象,要使用 throw 关键字(throw 关键字的讲解可参考9.5节)。
【例9.5】自定义异常的抛出与捕捉(实例位置:资源包\TM\sl\9\5)
在项目中创建 Tran 类,在该类中创建一个带有 int 型参数的方法 avg(),该方法用来检查参数是否小于 0 或大于 100。如果参数小于 0 或大于 100,则通过 throw 关键字抛出一个 MyException 异常对象,并在 main() 方法中捕捉该异常。实例代码如下:
public class Tran { // 创建类
static int avg(int number1, int number2) throws MyException { // 定义方法,抛出异常
if (number1 < 0 || number2 < 0) { // 判断方法中参数是否满足指定条件
throw new MyException("不可以使用负数"); // 错误信息
}
if (number1 > 100 || number2 > 100) { // 判断方法中参数是否满足指定条件
throw new MyException("数值太大了"); // 错误信息
}
return (number1 + number2) / 2; // 将参数的平均值返回
}
public static void main(String[] args) { // 主方法
try { // try代码块处理可能出现异常的代码
int result = avg(102, 150); // 调用avg()方法
System.out.println(result); // 将avg()方法的返回值输出
} catch (MyException e) {
System.out.println(e); // 输出异常信息
}
}
}
运行结果如图9.4所示。

编程训练(答案位置:资源包\TM\sl\9\编程训练)
【训练3】模拟老师上课前的点名过程 将旷课的学生作为异常抛出:张三、李四、王五(老师在点名册上记下了“王五旷课”)。
【训练4】超市限购 超市经常会对定价较市场价低的产品实施限购:超市里的鲜鸡蛋每500克3.98元,每人限购1500克。现将超过1500克的作为异常抛出,而对于满足条件的,计算出应付款。