异常的分类
异常分为编译时异常和运行时异常
编译时异常
在编译时发生的异常,叫做编译时异常,也称为受检查异常
CloneNotSupportedException就是一个编译时异常
编译时异常编译时我们就能发现,必须对其进行捕获或声明以便抛出
运行时异常
在执行程序时发生的异常,称为运行时异常,也叫非受检查异常
NullPointerException空指针异常
运行时异常我们不进行处理,JVM会帮我们处理
注意:语法错误不能称为异常
异常体系结构
- Throwable 有两个子类 Error 和 Exception
- Exception 异常分为编译时异常和运行时异常,运行时异常要继承RuntimeException
- Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:
StackOverflowError和OutOfMemoryError,一旦发生回力乏术。
异常处理
throw 抛出异常
通过throw我们可以主动抛出异常
语法格式:
throw new 异常类型(“提示信息”);
- 异常抛出后,后序代码不执行
- 抛出的对象必须是 Exception 或 Exception子类对象
- 如果抛出的是编译时异常,可以不处理,JVM会处理
- 如果抛出的是编译时异常,我们必须处理,否则无法通过编译
try catch捕获处理异常
throws 声明异常,交给方法的调用者处理
throws 声明异常
当前方法不捕获处理异常时,可以通过throws声明异常,来提醒调用者。
主要用与声明编译时异常,因为运行时异常我们不处理JVM也会帮我们处理,而编译时异常必须我们进行处理。
语法格式:
修饰符 返回值类型 方法名(参数列表)throws 异常类型1,异常类型2…{
…
}
- 如果声明抛出的多个异常具有父子类关系,可以只声明父类异常
- 如果声明的是编译时异常,方法的调用者必须捕获处理或throws继续声明抛出
try catch 捕获处理
方法调用者继续声明抛出