博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java异常机制 及 浅谈嵌套try-catch
阅读量:5874 次
发布时间:2019-06-19

本文共 2260 字,大约阅读时间需要 7 分钟。

hot3.png

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

传统的处理异常的办法是:函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。

这样做有如下的弊端:(1)易混淆:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;(2)可读性降低,将程序代码与处理异常的代码混叠在一起;(3)门槛高,由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 

Java给我们提供了一套异常处理机制,极大的方便了我们编程!它把各种不同的异常进行分类,并提供了良好的接口。在Java中
,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常
对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。

一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通
过它的catch来捕获它,或最后(finally)由缺省处理器来处理。

如果我们为了程序简便,在一个方法里不主动捕获异常,而是将其抛出去(throw),这个时候我们就要借助throw/throws了。

throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面
的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常
的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用
try—catch语句。
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在
主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象,由其进行处理。
简单代码示例:
static int quotient(int x,int y) throws MyException{//定义方法抛出异常
    if(y < 0){  //判断参数是否小于0
         throw new MyException("除数不能是负数");//异常信息
     }
     return x/y;//返回值

 }

-----------------------------------------------------------------------------------------------------------------------

掌握Java异常处理机制,可以解决我们实际编程中出现的 “灵异事件” !比如同样一段代码,在不同的地方使用结果却大相径庭,这个时候我们就要考虑异常处理的方式和地点是否妥当了!这不,最近笔者就遇到了一个实际项目中出现的问题,把我折磨得欲仙欲死呀!现讲情况说明如下:

采用ZipFile类解压zip文件时,同样的代码解压不同zip文件时有时可以正确执行,有的却跑出异常而终止。当时怀疑是程序有问题,但经过反复检查,发现程序并未逻辑错误。一次尝试着在循环解压过程外再加上 try-catch 块,居然成功了!!!最终发现是因为解压文件时遇到特殊文件而发生异常中断退出(如解压.html文件等)。

分析原来的代码,发现在整个业务处理上,我只用了一个 try--catch 来做异常处理,而且异常处理还在循环解压文件外!这就导致了当循环解压到特殊文件时,发生异常而终止了!

这也通过侧面也可以说明了“多重try--catch块和嵌套 try--catch 块的区别”了吧,现在见到阐释下,欢迎拍砖!恳请拍砖!

多重try--catch块:可以解决程序顺序出现的异常,但如果遇到异常时,程序可能会终止;

嵌套try--catch块:只要不是外层发生异常,内层的异常即使发生也不太可能使程序终止。

以上大部分是转载的,我想对于基础知识,我还有只停留在皮毛。现在也只是遇到了才去瞄一眼,无法和Java大牛企及。对应此篇文章中的个人愚见,欢迎高手斧正,共同进步!

谢谢!

基本知识参考:
http://dev.yesky.com/291/2547291.shtml
http://zhidao.baidu.com/question/212549615.html
http://zhidao.baidu.com/question/95292504.html
http://wonengchuangzaoqij.blog.163.com/blog/static/371674392011102110513421/
http://www.189works.com/article-9776-1.html
思考的问题:
http://topic.csdn.net/t/20060603/19/4798533.html
其他参考(自定义异常):
http://wenwen.soso.com/z/q219407959.htm
http://www.189works.com/article-9776-1.html

转载于:https://my.oschina.net/hanzhankang/blog/72819

你可能感兴趣的文章
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>