1.5 自定义异常类

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

1.5.1 自定义异常类定义

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

//自定义异常类,处理年龄大于120或小于0的Person

class AgeException extends Exception{

    private String message;

    public AgeException(int age)                  //自定义异常类构造方法

    {

        message = "年龄设置为:" + age + "不合理!";

    }

    public String toString()                           //自定义异常类toString()方法

    {

        return message;

    }

}
copy

1.5.2 自定义异常类使用

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

class Person{

    private int age;

    //声明setAge(int age)方法可能抛出AgeException自定义异常

    public void setAge(int age) throws AgeException 

    {

        if(age <=0 || age >= 120){

            throw new AgeException(age);//抛出AgeException自定义异常

        }else{

            this.age = age;

        }

    }

    public int getAge(){

        return age;

    }

}

public class TestEx19{

    public static void main(String[] args) 

    {

        Person p1 = new Person();

        Person p2 = new Person();

        try {

            p1.setAge(150);                    //会抛出AgeException自定义异常

            System.out.println("正确输出年龄为:" + p1.getAge());

        } catch (AgeException e) {            //进行异常捕获处理

            System.out.println(e.toString());

        }

        try {

            p2.setAge(60);                      //不会抛出AgeException自定义异常

            System.out.println("正确输出年龄为:" + p2.getAge());

        } catch (AgeException e1) {

            System.out.println(e1.toString());

        }

    }

}
copy

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

图1.22 自定义异常类使用