疯狂java08--异常捕捉的陷阱

8.1正确关闭资源的方式

实际开发中,经常需要在程序中打开一些物理资源,如数据库连接,网络连接,磁盘文件等。打开这些资源后必须显示关闭,否则将会引起资源泄露。JVM的垃圾回收机制不会回收这些资源。垃圾回收机制只是负责回收堆内存中分配出来的内存。

*使用fnially块来关闭物理资源,保证关闭操作总是会被执行

*关闭每个资源之前首先保证引用该资源的引用变量不为null

*为每个物理资源使用单独的try-catch块关闭资源,保证关闭资源时引发的异常不会影响其他资源的关闭

8.2finally块的陷阱

当System.exit(0)被调用时,虚拟机退出,并不会执行finally块的代码

当try或者catch中出现return语句,会先执行,但并不会立即退出。会继续寻找是否有finally块。如果finally中也有return语句,那么系统将不会跳回去执行try块,catch块里的任何代码。

8.3catch块的用法

一个try块不可能单独存在,而且一个try块还可以对应多个catch块。

捕捉父类异常的catch块都应该排在捕捉子类异常的catch块之后,否则编译错误。

*不要使用异常来进行流程控制!异常机制不是为流程控制而准备的,只是为程序的意外情况准备的,因此程序只应该为异常情况使用异常机制。所以不要使用这种别出心裁的方法来遍历数组。

程序使用catch捕捉异常时,并不能随心所欲地捕捉所有异常。程序可以再任意想捕捉的地方捕捉运行时异常,但对于其他检查异常,只有当try块可能抛出该异常时,catch块才能捕捉该检查异常。

*不能再catch中再次调用出现异常的方法,否则可能造成无限递归。

8.4继承得到的异常

java语言规定,子类重写父类方法时不能声明抛出比父类方法类型更多,范围更大的异常。

猜你喜欢

转载自blog.csdn.net/little_____white/article/details/81567372