java try catch嵌套_java异常机制 及 浅谈嵌套try-catch

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

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

这样做有如下的弊端:(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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用try-catch语句来处理异常try块中包含可能会引发异常的代码,而catch块用于捕获并处理这些异常嵌套try-catch语句可以用于处理多个层次的异常情况。 在引用\[1\]中的示例中,有一个嵌套try-catch结构。外层try块用于捕获外层的异常,而内层try块用于捕获内层的异常。如果内层的异常被捕获,可以在catch块中进行相应的处理。在这个示例中,内层的异常被捕获后,使用log.error()方法记录异常信息。 在引用\[2\]中的示例中,内层的catch块添加了throw new RuntimeException()语句,将异常抛出。这样做可以将异常传递给调用者,以便在更高层次的代码中处理异常。 总之,try-catch嵌套可以用于处理多个层次的异常情况,使程序能够正常运行并提供异常信息。 #### 引用[.reference_title] - *1* *2* [try catch 嵌套](https://blog.csdn.net/qq_44209563/article/details/123695520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [try catch里面try catch嵌套](https://blog.csdn.net/wangdd_199326/article/details/80363114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值