除了系统中自己带的异常,我们也可以自己写一些简单的异常类来帮助我们处理问题。
所有的异常命名都是以Exception
结尾,并且都是Exception
的子类。
假设我们要编写一个人类的类,为了判断年龄的输入是否合法,我们编写了一个名为IllegalAgeException
的异常类:
package 实验五;public class IllegalAgeException extends Exception
{private static final long serialVersionUID = 1L; public IllegalAgeException() {}public IllegalAgeException(String message){super(message);}
}
这里如果我们要传递自己的信息就要有一个有参构造函数,里面调用父类的有参构造函数并将消息传入。(然后就可以调用异常类的方法将消息输出)
然后我们为了可以多次使用再创建一个专门检查年龄是否合法的类,里面没有什么成员,就只有一个静态方法用来检查并抛出异常。
package 实验五;public class CheckAge
{public static void check(int age) throws IllegalAgeException{if(age<=0){throw new IllegalAgeException("人类年龄应该是一个非负整数!");}else if(age>=150){throw new IllegalAgeException("目前不存在年龄这么大 的人类!");}}
}
然后我们在创建人类的时候就可以调用这个类检查输入的年龄是否有误了:
package 实验五;import java.util.*;public class Person
{private int age;private String sex;private String name;Person(){int _age;Scanner sc=new Scanner(System.in);System.out.print("姓名:"); name=sc.next();System.out.print("性别:"); sex=sc.next();System.out.print("年龄:"); _age=sc.nextInt();try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}Person(String _name,String _sex,int _age){name=new String(_name); sex=new String(_sex);try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}String getName(){return name;}String getSex() {return sex;}int getAge(){return age;}void setName(String _name){name=new String(_name);}void setSex(String _sex){sex=new String(_sex);}void setAge(int _age){try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}
}
可以在主程序中运行一下检测:
package 实验五;import java.util.*;public class A
{public static void main(String[] args) {Person a=new Person();}}
运行结果: