一、介绍
-
异常是程序在“编译”或者“执行”的过程中可能出现的问题,注意**:**语法错误不算在异常体系中。
-
比如:数组索引越界、空指针异常、 日期格式化异常,等…
二、异常体系
-
Error:系统级别问题、JVM退出等,代码无法控制。
-
Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题
-
RuntimeException及其子类:运行时异常,编译阶段不会报错。 (空指针异常,数组索引越界异常)
-
除RuntimeException之外所有的异常:编译时异常,编译期必须处理的,否则程序不能通过编译。 (日期格式化异常)。
三、编译时异常和运行时异常
- 编译时异常就是在编译的时候出现的异常
- 运行时异常就是在运行时出现的异常
四、编译时异常处理方式
一、出现异常直接抛出去给调用者,调用者也继续抛出去
- throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理
- 这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡
// 抛出异常格式
方法 throws 异常1,异常2,异常3{}
// 规范做法:代表可以抛出一切异常
方法 throws Exception{}
二、出现异常自己捕获处理,不麻烦别人
- 监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
- 这种方法还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行
try{
// 监视可能出现异常的代码
}catch(异常类型1 变量){
// 处理异常
}catch(异常类型2 变量){
// 处理异常
}
try{
// 可能出现异常的代码
}catch(Exception e){
e.printStackTrace();// 直接打印异常栈信息
}
Exception可以捕获处理一切异常类型
三、前两者结合,出现异常直接抛出去给调用者,调用者捕获处理
- 方法直接将异常通过throws抛出去给调用者
- 调用者收到异常后直接捕获处理
五、自定义异常
一、自定义编译时异常
- 定义一个异常类继承Exception.
- 重写构造器。
- 在出现异常的地方用throw new 自定义对象抛出,
- 作用:编译时异常是编译阶段就报错,提醒更加强烈,一定需要处理!!
二、自定义运行时异常
- 定义一个异常类继承RuntimeException.
- 重写构造器。
- 在出现异常的地方用throw new 自定义对象抛出!
- 作用:提醒不强烈,编译阶段不报错!!运行时才可能出现!!