什么是异常?
- 异常本质上是程序上的错误,错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。
- 编译期间的错误通常是基础的语法错误,比如括号没有正常配对、语句结束后少写了分号,关键字编写错误等,编译器会对这些错误给出提示,帮助我们进行修订。
- 运行期间的错误只有程序运行时才能看到错误的提示,比如数组访问时下标越界、使用空对象调用方法、算术运算时除数为0、类型转换时无法正常转型等,运行期间的错误往往是难以预料的。
程序中的异常
- 在程序运行过程中,意外发生的情况,背离我们程序本身的意图的表现,都可以理解为异常。
- 当程序在运行期间出现了异常,如果置之不理,程序可能会不正常运行、强制中断运行、造成用户数据丢失、资源无法正常释放、直接导致系统崩溃,显然这不是我们希望看到的结果。
- 利用Java中的异常处理机制,我们可以更好地提升程序的健壮性。
异常的分类
在java中,通过Throwable
以及它的相关子类来描述各种不同的异常类型。
Throwable
是异常的根类,包含两个子类Error
和Exception
Error
-
Error
是程序无法处理的错误,表示运行应用程序中较严重问题。 - 大多数的错误与代码编写所执行的操作是没有什么关系的,而表示代码运行的时候java虚拟机出现的系列问题。
- 常见的有虚拟机错误、内存溢出、线程死锁等,这些错误往往是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。
- 对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。
Exception
-
Exception
是程序本身可以处理的异常。异常处理通常指的是针对这类异常的处理 -
Exception
类的异常包括Unchecked Exception
和Checked Exception
-
Unchecked Exception
(非检查异常):编译器不要求强制处理的异常,包含RuntimeException
以及它的相关子类 -
Checked Exception
(检查异常):编译器要求必须处理的异常,除了RuntimeException
以及它的相关子类其他的Exception
子类都是检查异常,如IOException
、SQLException
常见的异常类型
异常处理
在Java应用程序中,异常处理机制为:抛出异常、捕获异常
抛出异常
- 当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统进行处理。
- 异常对象通常包含异常类型和异常出现时的程序状态等信息。
- 运行时系统负责寻找处置异常的代码并执行。
- 在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。
- 运行时系统从发生异常的方法开始,依次回查调用栈中的方法,当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。
- 当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
捕获异常
对于运行时异常、错误或可查异常,java技术所要求的异常处理方式有所不同。
Java规定对于可查异常必须捕获、或者声明抛出,而允许忽略不可查的RuntimeException
(含子类)和Error
(含子类)
实现
主要通过5个关键字来实现:try
、catch
、finally
、throw
、throws
网友评论