自定义异常:现有异常不会满足日常生活中出现的所有异常进行处理和解决,所以有时候需要我们自己来定义合适的异常来让程序继续运行。
自定义异常的种类:
一、自定义运行时异常
编译阶段不报错,提醒不强烈,运行时才可能出现错误。
①定义异常类:见名起义
如定义一个保存名字的方法,名字的类型为:String,如果输入了非字符串类型的(格式类型不符合),程序会报错,我们就可以针对名字定义异常,如:NameFormatException等。(方法不统一)
②写继承关系:定义一个异常类继承RuntimeException
③空参构造、带参构造
④通过throw new 异常类(xxx)来创建异常对象并抛出。
二、自定义编译异常
编译阶段就报错,提醒更加强烈。
①定义异常类:见名起义
②写继承关系:定义一个异常类继承RuntimeException
④通过throw new 异常类(xxx)来创建异常对象并抛出。
例:写一个运行异常:
输入年龄,然后保存年龄。(1-150)
可能会出现的异常:年龄小于0,或者年龄大于150,所以可以针对这些可能出现的异常进行自定义异常。
①②:定义异常类继承Exception
public class AgeOutOfException extends Exception{
public AgeOutOfException() {
}
public AgeOutOfException(String message) {
super(message);
}
}
③④⑤
public class Practice6 {
public static void main(String[] args) {
try {
saveAge(220);
}catch (Exception e){
e.printStackTrace();
System.out.println("底层出现了bug");
}
}
public static void saveAge(int age) throws AgeOutOfException {
if(age>0&&age<150){
System.out.println("年龄保存成功:"+age);
}else {
throw new AgeOutOfException("年龄不在1-150的范围内,您输入的年龄为:"+age);
}
}
}
当年龄等于220时,结果为:
AgeOutOfException: 年龄不在1-150的范围内,您输入的年龄为:220
at Practice6.saveAge(Practice6.java:15)
at Practice6.main(Practice6.java:4)
底层出现了bug
当年龄输入为88时,结果为:
年龄保存成功:88