异常
概念
- 程序在运行过程中出现的出现的特殊情况
处理的必要性
- 任何程序都可能存在大量的未知问题、错误;如果不进行处理,可能会导致程序中断,造成不必要的损失
分类
Throwable类
-
Error类
- jvm、硬件、执行逻辑错误,不能手动处理
-
Exception
-
RuntimeExceptin
- 可处理,可不处理
-
受查异常
- 必须处理
-
常见运行时异常
-
NullPointException
-
ArrayIndexOutOfBoundsException
-
ClassCastException
-
ArithmeticException
异常的产生
自动抛出异常
- 当程序运行时遇到不规范的代码或结果,会产生异常
手动抛出异常
- throw 异常对象
结果
- 相当于遇到return,导致程序因异常而终止
异常的传递
- 按照方法的调用链反向传递,如始终没有处理异常,最终会由 JVM进行默认异常处理(打印堆栈跟踪信息)并中断程序
检查时异常:throws声明异常,修饰在方法参数后端
运行时异常:可处理可不处理,无需声明异常
异常处理的结构
try catch finally结构
-
try{}catch{}
-
try{}catch{}catch{}
-
try{}catch{}finally{}
-
try{}finaly{}
- 不能捕获异常,仅仅用来发生异常时,释放资源
- 一般用在底层代码,只释放资源不处理异常,将异常向上抛出
特点
- 子类在前,父类在后
- 发生异常时按顺序逐个匹配
- 只执行一个与异常类型相匹配的catch语句
- finally可根据需要写与不写
- finally代码一定会执行,除非遇到退出jvm(System.exit(0))
自定义异常
- 实现Exception或子类
带有异常声明的方法重写
- 子类中的方法,不能抛出比父类更多、更宽的检查时异常