- 异常的分类
- 运行时异常,无需用trycatch包起来。运行时异常是调用方法时都有可能发生异常,如果都需要trycatch明显不合理。
- 按ctrl按钮进入源代码即可查看是否需要每次都用try/catch包裹,继承自runtimeException是运行异常,check异常是继承自Exception.
- try/catch包裹因为有时出现异常需要自己进行处理。
- 自定义异常
自定义异常,通常用来说明我们程序中的业务逻辑问题。
注意事项:
- 类名见名知意
- 继承Exception(直接或间接均可)
- 要定义序列化版本号
- 重写父类的构造方法
自定义异常类。继承异常类,重写所有构造方法。
public class IllegalAgeException extends Exception {
//版本号
static final long serialVersionUID = 1L;
public IllegalAgeException() {
}
public IllegalAgeException(String message) {
super(message);
}
public IllegalAgeException(String message, Throwable cause) {
super(message, cause);
}
public IllegalAgeException(Throwable cause) {
super(cause);
}
public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
在对年龄传值时添加限制
public class Person {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws IllegalAgeException {
if (age < 0 || age > 120){
/*
* 根据业务需求,可以在age值不符合要求时
* 主动抛出异常,表示程序中这样的赋值不被允许
* throw关键字后面实例化一个异常对象,当前代码会发生这个类型的异常
* 当前方法会在运行throw后终止,类似return
* */
throw new IllegalAgeException("年龄不合法");
}
this.age = age;
}
}
调用方法,抛出异常
public class ThrowDemo {
public static void main(String[] args) {
Person p = new Person();
try{
p.setAge(500);
}catch (IllegalAgeException e){
System.err.println(e.getMessage());
}
System.out.println(p.getAge());
}
}