Java 异常
异常概念
异常一般我们未能意料到的情况,可能是系统或者环境问题造成,也可能是程序逻辑不严谨导致的错误
异常分类
异常:可以理解是在程序运行中发生的错误或者意料之外的情况
分为 编译期异常 和 运行期异常
- 编译期异常:比如少括号,少分号,在编译期间就可以发现并且改正
- 运行期异常:在程序运行期间出现的错误,一般无法预知,比如空指针异常,数组索引越界
异常体系图
异常祖类Throwable
结构图
Error
Error是程序无法处理的错误,表示运行应用程序里较严重的问题
它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时,不允许出现的情况
对于设计合理的程序来说,如果发生Error,也无法处理
常见的Error有:
VirtualMachineError:虚拟机错误
OutOfMemoryError:内存溢出
ThreadDeath:线程死锁
Exception
Exception:是程序本身可以处理的异常
异常处理就是对此类异常进行处理
Exception分为两类:检查异常和非检查异常
Unchecked Exception 非检查型异常
非检查异常就是 RuntimeException异常及其子类,
此类异常不要求强制处理,开发过程中可以不处理
但是此类异常的出现,往往是程序代码中的错误,我们要做的是修正代码中造成此类异常出现的错误代码。
RuntimeException常见异常:
1、NullPointerException:空指针异常。
改进:代码里先判断一下对象是否为空,再进行下一步操作
2、ArrayIndexOutOfBoundException:数组索引越界异常
改进:对数组元素操作之前,先判断该元素索引是否小于数组元素个数减一
3、ArithmeticException:算数异常
4、ClassCastException:类型转换异常
改进:在代码里找,类型转换之前的类型是什么,正确对应上
Checked Exception 检查型异常
在Java中的Exception的子类中除了RuntimeException及其子类之外,都是检查型异常
此类异常,就必须进行处理,否则无法通过编译器编译
处理异常
处理异常有两种方式:抛出异常 和 捕捉异常
抛出异常
throw
在方法代码中抛出异常使用关键字 throw,后面紧跟一个异常对象
比如 throw new Exception();