1、什么是异常
- 错误在我们编写程序的过程中会经常发生,包括
编译期间(括号没有正常的配对、语句结束后少了“;” 、关键字编写错误等等,这些错误编译器会发现并帮助我们进行修改)
和运行期间
(编译器无能为力,并且难以预料会产生什么样的结果)的错误。 在程序运行过程中,意外发生的,背离我们程序本身意图的表现,都可以理解为异常。
2、异常分类
Error
是程序无法处理的错误,表示运行应用程序中较严重问题;常见的错误有虚拟机错误(VirturalMachineError),内存溢出错误(OutOfMemoryError)、线程死锁(ThreadDeath)等;它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况Exception
时程序本身可以处理的异常,异常处理通常指针对这种类型异常的处理Unchecked Exception
:编译器不要求强制处理的异常,它包含RuntimeException
以及它的相关子类3、异常处理
在Java应用程序中,异常处理机制为:
- 抛出异常:当一个方法当中出现错误引发的异常的时候,方法会去创建异常对象并且交付给运行时系统进行处理
- 捕获异常:而当运行时系统捕获到了异常就会进入到捕获异常环节,在这个环节中,运行时系统会逐步的去寻找合适的处理器,如果找到了与抛出异常匹配的处理器,那么就会执行相关的处理逻辑,如果始终没有找到,那么运行时系统将会终止,这时也就意味着Java程序也就终止了
- 对于运行时异常、错误或可查异常,Java所要求的异常处理方式有所不同
- Java规定:对于可查异常必须捕获、或者声明抛出。
- 允许忽略不可查的RuntimeException(含子类)和Error(含子类)
- 通过5个关键字来实现:try、catch、finally、throw、、throws
- 捕获异常
- try:执行可能出现异常的代码
- catch:捕获异常
- finally:无论是否发生异常代码总能执行
- 声明异常
- throws :声明可能要抛出的异常
- 捕获异常
- try-catch-finally
- try块后面可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
- try必须组合使用,不允许单独存在
- catch和finally没有try,也无法使用
public static void exit(int status)
:终止当前正在运行的Java虚拟机,参数14、return关键字在异常处理中的作用
finally块中不能加return,会屏蔽掉之前的return逻辑
5、 throw & throws
可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出
1、throws
如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法的声明处用throws子句来声明抛出异常,谁调用了这个方法,谁就会去处理相关的抛出异常
- throws语句在方法定义时声明该方法要抛出的异常类型。
- 当方法抛出异常列表中的异常时,方法将不对这些类型及其子类类型的异常做处理,而是抛向调用该方法的方法,由它去处理