异常概述
- 异常本质上是程序的错误。
- 错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。
- 在程序运行过程中,意外发生的情况,背离我们程序本身的意图表现,都可以理解为异常。
异常分类
异常可以分为Error和Exception。
1. Error
(1) Error是程序无法处理的错误,表示运行应用程序中较严重问题;
(2) 例如:虚拟机错误(VirtualMachineError)、内存溢出(OutOfMemoryError)、线程死锁(TreadDeath)等;
(3) Error在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况;
(4) 对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。
2. Exception
(1) Exception是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。
(2) Exception分为非检查异常(Unchecked Exception)和检查异常(Checked Exception)两个方向。
a. 非检查异常(Unchecked Exception)指编译器不要求强制处理的异常。
非检查异常例如RuntimeException,其中包含空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、算数异常(ArithmeticException)、类型转换异常(ClassCastException);
b. 检查异常(Checked Exception)指编译器要求必须处置的异常。
检查异常例如IO异常(IOException)、SQL异常(SQLException)。
异常处理分类
1. 异常处理机制
(1) 在Java程序应用中,异常处理机制为:抛出异常,捕捉异常;
(2) 抛出异常:异常对象包含异常类型、异常出现时的程序状态等;
(3) 捕获异常:对于运行时异常、错误或可查询异常,Java技术所要求的异常处理方式有所不同。
(4) Java规定:
a. 对于可查异常必须捕捉,或者声明抛出;
b. 允许忽略不可查的RuntimeException(含子类)和Error(含子类)
2. 异常处理
通过5个关键字来实现:try、catch、finally、throw、throws
(1) 捕获异常
a. try:执行可能产生异常的代码
b. catch:捕获异常
c. finally:无论是否发生异常,代码总能执行
(2) 声明异常
throws:声明可能要抛出的异常
(3) 抛出异常
throw:手动抛出异常