1.8 自定义异常类

  自定义异常,顾名思义,就是程序员自己定义的异常。当Java类库中的异常不能满足程序需求时,程序员可以自己定义并使用异常。下面结合一个实际的例子,介绍如何定义并使用自定义异常。

1.8.1 自定义异常类定义

  Exception类是Java中所有异常类的父类,所以定义自定义异常类时,通常继承自该类。现在定义一个自定义异常类AgeException,它有一个构造函数和一个toString()方法,具体代码如下:

  1. //自定义异常类,处理年龄大于120或小于0的Person
  2. class AgeException extends Exception{
  3. private String message;
  4. public AgeException(int age) //自定义异常类构造方法
  5. {
  6. message = "年龄设置为:" + age + "不合理!";
  7. }
  8. public String toString() //自定义异常类toString()方法
  9. {
  10. return message;
  11. }
  12. }

1.8.2 自定义异常类使用

  接下来通过Person类和TestEx19这两个类,来使用这个自定义异常类。具体代码如下(其中注释简要说明了重要步骤的含义):

  1. class Person{
  2. private int age;
  3. //声明setAge(int age)方法可能抛出AgeException自定义异常
  4. public void setAge(int age) throws AgeException
  5. {
  6. if(age <=0 || age >= 120){
  7. throw new AgeException(age);//抛出AgeException自定义异常
  8. }else{
  9. this.age = age;
  10. }
  11. }
  12. public int getAge(){
  13. return age;
  14. }
  15. }
  16. public class TestEx19{
  17. public static void main(String[] args)
  18. {
  19. Person p1 = new Person();
  20. Person p2 = new Person();
  21. try {
  22. p1.setAge(150); //会抛出AgeException自定义异常
  23. System.out.println("正确输出年龄为:" + p1.getAge());
  24. } catch (AgeException e) { //进行异常捕获处理
  25. System.out.println(e.toString());
  26. }
  27. try {
  28. p2.setAge(60); //不会抛出AgeException自定义异常
  29. System.out.println("正确输出年龄为:" + p2.getAge());
  30. } catch (AgeException e1) {
  31. System.out.println(e1.toString());
  32. }
  33. }
  34. }

程序运行结果如图1.22所示。

1.8 自定义异常类 - 图1


图1.22 自定义异常类使用