基础
java中的异常的本质上其实也是一个类,只是一种异常的类。我们可以类比throw关键字和return关键字:
- return代表程序正常退出,throw代表异常退出
- return返回的位置是确定的,就是上一级调用者,而throw执行的下一步不确定,由java的异常机制处理决定的。异常处理机制就是从当前的函数开始查找谁捕获了这个异常,一直到主函数,如果最后发现没有去捕获这个异常,就会走默认的处理机制,输出异常栈并退出整个程序。
总的来说,异常是相对于return来说的一种异常退出机制,可以由系统触发、也可以通过throw触发,可以是用try catch语句进行捕获。如果没有捕获的话,程序会抛出异常栈并且退出整个程序。
异常类介绍
异常类共同的父类是Throwable,异常类的继承体系基本如下图所示 :
- Error表示系统错误或者资源耗尽,由java自身去使用,应用程序不应该去抛出和处理
- Exception表示应用程序错误,应用程序可以通过继承该类或者其子类去自定义异常。
- RuntimeException称为运行时异常,也称为未受检异常。Exception的其他子类都为受检异常,Error及其子类都是未受检异常。
- 受检异常和未受检异常的区别在于Java如何处理这两种异常。对于受检异常,Java会强制应用程序进行处理,否则会有编译错误,而对于未受检异常就没有这个要求。
要点
- finally块无论程序是否发生异常都会执行,一般用于释放资源。
- 并且有一个重要的点是try和catch块中有return语句时候,会在finally块执行后才可以执行,因此finally中即是有return语句,也不能改变最后程序的返回值。