博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中异常处理时为什么可以只要try-finally,而可以不要catch
阅读量:3923 次
发布时间:2019-05-23

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

更为严格的说法其实是:

在这里插入图片描述

try只适合处理运行时异常,try+catch适合处理运行时异常+普通异常。也就是说,如果你只用try去处理普通异常却不加以catch处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用catch显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以catch可以省略,你加上catch编译器也觉得无可厚非。

理论上,编译器看任何代码都不顺眼,都觉得可能有潜在的问题,所以你即使对所有代码加上try,代码在运行期时也只不过是在正常运行的基础上加一层皮。但是你一旦对一段代码加上try,就等于显示地承诺编译器,对这段代码可能抛出的异常进行捕获而非向上抛出处理。如果是普通异常,编译器要求必须用catch捕获以便进一步处理;如果运行时异常,捕获然后丢弃并且+finally扫尾处理,或者加上catch捕获以便进一步处理。

至于加上finally,则是在不管有没捕获异常,都要进行的“扫尾”处理

扩展资料

使用try-catch-finally时,必须遵循以下几条规则:

①必须在 try 之后添加 catch 或 finally 块,try 块后可同时接 catch 和 finally 块,但至少有一个块。

② 若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。

③ catch 块与相应的异常类的类型相关。

④ 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块。

⑤ 可嵌套 try-catch-finally 结构。

⑥在 try-catch-finally 结构中,可重新抛出异常。

⑦除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。

转载地址:http://rgkgn.baihongyu.com/

你可能感兴趣的文章
杭电oj-2011 多项式求和 C++
查看>>
杭电oj-2014 青年歌手大奖赛_评委会打分 C++
查看>>
杭电oj-2015 偶数求和 C++
查看>>
杭电oj-2016 数据的交换输出 C++
查看>>
杭电oj-2017 字符串统计 C++
查看>>
杭电oj-2018 母牛的故事 C++
查看>>
Educational Codeforces Round 87 (Rated for Div. 2)----题目+题解(A、B)
查看>>
Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!B. Johnny and His Hobbies(异或)---题解
查看>>
使用WinINet获取网页源代码
查看>>
Ansi、Unicode、UTF-8字符串之间的转换和写入文本文件
查看>>
error C1189:#error:This file requires _WIN32_WINNT to be #defined at least to 0x0403
查看>>
CentOS yum 源的配置与使用
查看>>
error while loading shared libraries: libevent-2.0.so.5 安装好mamcache,启动服务时
查看>>
c++ web编程:写出你的CGI程序
查看>>
Linux RPM 命令参数使用详解 查看 rpm包依赖性
查看>>
xz压缩命令
查看>>
Mysql各种存储引擎对比总结(常用几种)
查看>>
java为我们已经提供了各种锁,为什么还需要分布式锁?
查看>>
一文带你理解mysql中的分区表和合并表(一个常见知识点)
查看>>
Redis5.0数据淘汰策略详解(最新版本,面试常问)
查看>>