异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
传统的处理异常的办法是:函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。
这样做有如下的弊端:(1)易混淆:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;(2)可读性降低,将程序代码与处理异常的代码混叠在一起;(3)门槛高,由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。
如果我们为了程序简便,在一个方法里不主动捕获异常,而是将其抛出去(throw),这个时候我们就要借助throw/throws了。
}
-----------------------------------------------------------------------------------------------------------------------
掌握Java异常处理机制,可以解决我们实际编程中出现的 “灵异事件” !比如同样一段代码,在不同的地方使用结果却大相径庭,这个时候我们就要考虑异常处理的方式和地点是否妥当了!这不,最近笔者就遇到了一个实际项目中出现的问题,把我折磨得欲仙欲死呀!现讲情况说明如下:
采用ZipFile类解压zip文件时,同样的代码解压不同zip文件时有时可以正确执行,有的却跑出异常而终止。当时怀疑是程序有问题,但经过反复检查,发现程序并未逻辑错误。一次尝试着在循环解压过程外再加上 try-catch 块,居然成功了!!!最终发现是因为解压文件时遇到特殊文件而发生异常中断退出(如解压.html文件等)。
分析原来的代码,发现在整个业务处理上,我只用了一个 try--catch 来做异常处理,而且异常处理还在循环解压文件外!这就导致了当循环解压到特殊文件时,发生异常而终止了!
这也通过侧面也可以说明了“多重try--catch块和嵌套 try--catch 块的区别”了吧,现在见到阐释下,欢迎拍砖!恳请拍砖!
多重try--catch块:可以解决程序顺序出现的异常,但如果遇到异常时,程序可能会终止;
嵌套try--catch块:只要不是外层发生异常,内层的异常即使发生也不太可能使程序终止。
以上大部分是转载的,我想对于基础知识,我还有只停留在皮毛。现在也只是遇到了才去瞄一眼,无法和Java大牛企及。对应此篇文章中的个人愚见,欢迎高手斧正,共同进步!
谢谢!