异常类

运行时异常
运行时才发现,不影响编译,绝对不能出现,如果确定不会出现异常不做任何处理
编译时异常
绝对不可能出现,不处理无法编译,如果确定不会出现,throws抛出绕过虚拟机
throws
用在异常所在方法的参数列表后
后跟1到多个异常类名 逗号隔开
(没有顺序性)(任何异常类名都可放)
如果抛出了【编译期异常】 则调用该方法的方法也必须处理或者抛出该编译期异常或者其父类
如果子类重写方法抛出了【编译期异常】 则父类原始方法必须抛出一样或者更高级异常
try catch
使用在方法内部
将怀疑出错的代码放入try 尝试执行
如果报错会创建该异常类的对象 去和后续所有catch中的异常类型匹配
匹配不成功 依然报错
匹配成功 则进入对应的catch模块执行 后续业务正常
不能catch 在try中不可能出现的【编译期异常】
catch要注意顺序性 子类异常放前面 父类异常放后面、
自定义异常
就是重新定义一个类来继承Exception或者他的子类
public class NameException extends RuntimeException{
public NameException(String message) {
super(message);
}
}
用的时候通过throw直接new一个throw new NameException("message");
public class Test {
public static void main(String[] args) {
String name = "李四";
//如果姓名不是张三 希望通过报编译期异常形式提示姓名有误
//找到该报错的时机 以及 如何报错
if(!name.equals("张三")){
//该报错 犯错
try {
throw new NameException("您不是张三");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(e);
e.printStackTrace();
}
}
System.out.println("后续业务");
}
}
评论