JDK中定义了大量的异常类,可以描述编程时出现的大部分异常情况,但对于一些特殊情景下的异常,我们可以自己去定义。
创建步骤:
- 创建一个异常类
- 加入异常家族中(继承某个异常父类)
子类在构造时,只需要用super语句把异常信息传给父类,就可以通过getMessage方法获取自定义的异常信息
1.自定义异常格式
class 异常类名 extends Exception {
public 异常类名(String msg) {
super(msg);
}
}
2.标识出可能会出现的异常
throw new (异常类名)
3.捕获异常
try{
}catch (异常类名 e){
e.printStackTrace();//输出导致异常的更加详细的信息
}
案例:在person类中,年龄的范围是0-120岁,性别只能是男或女。自定义年龄异常类和性别异常类,输出相应异常提示信息。编写测试类,给人物的年龄和性别赋值,如果不符合要求,抛出自定义异常类的异常提示信息。
- 自定义年龄异常类
public class AgeException extends RuntimeException{
public AgeException(String s){
super(s);
}
}
- 自定义性别异常类
public class SexException extends RuntimeException{
public SexException(String s){
super(s);
}
}
- 在person类中标识异常和捕获异常
public void setAge(int age) {
if (age>=0&age<=120){
this.age = age;
}else {
try {
throw new AgeException("年龄不符合正常人类");
}catch (AgeException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
public void setSex(char sex) {
if (sex=='男'|sex=='女'){
this.sex = sex;
}else {
try {
throw new SexException("性别不匹配");
}catch (SexException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
- 创建测试类
public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setAge(122);
p.setSex('不');
}
- 运行结果:
年龄不符合正常人类
Day14异常.homework.twoGai.AgeException: 年龄不符合正常人类
at Day14异常.homework.twoGai.Person.setAge(Person.java:26)
at Day14异常.homework.twoGai.TestPerson.main(TestPerson.java:7)
性别不匹配
Day14异常.homework.twoGai.SexException: 性别不匹配
at Day14异常.homework.twoGai.Person.setSex(Person.java:43)
at Day14异常.homework.twoGai.TestPerson.main(TestPerson.java:8)