【java解惑】关于异常捕获的三条要求
2015-11-04 08:42
323 查看
有如下所示代码:
输出结果:
正如代码的输出字符串描述的那样,output1在编译期就报错了;output2能够正确执行,只是什么也不输出;t3.f()也可以正常执行。
分析总结:
output1说明一项基本要求,即对于捕获被检查异常的 catch 子句,只有在相应的 try 子句可以抛出这些异常时才被允许;output2说明了这项要求不会应用到的冷僻案例;t3.f()说明了多个继承而来的throws 子句的交集,将减少而不是增加方法允许抛出的异常数量。
注:本【java解惑】系列均是博主阅读《java解惑》原书后将原书上的讲解和例子部分改编然后写成博文进行发布的。所有例子均亲自测试通过并共享在github上。通过这些例子激励自己惠及他人。同时本系列所有博文会同步发布在博主个人微信公众号搜索“爱题猿”或者“ape_it”方便大家阅读。如果文中有任何侵犯原作者权利的内容请及时告知博主以便及时删除如果读者对文中的内容有异议或者问题欢迎通过博客留言或者微信公众号留言等方式共同探讨。
源代码地址https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
public class Example037 { static void output1() { try { System.out.println("如果一个 catch 子句要捕获一个类型为 E 的被检查异常," + "而其相对应的 try 子句不能抛出 E 的某种子类型的异常,那么这就是一个编译期错误"); } catch (IOException e) { System.out.println(""); } } static void output2() { try { // 捕获 Exception 或 Throwble 的 catch 子句是合法的,不管与其相对应的 try 子句的内 容为何 } catch (Exception e) { System.out.println("This can' t happen"); } } interface Type1 { void f() throws CloneNotSupportedException; } interface Type2 { void f() throws InterruptedException; } interface Type3 extends Type1, Type2 { } static class Class01 implements Type3 { public void f() { System.out.println("一个方法可以抛出的被检查异常集合是它所适用的所有类型声明要抛出的被检查异常集合的交集," + "而不是合集。因此, 静态类型为 Type3 的对象上的 f 方法根本就不能抛出任何被检查异常。"); } } public static void main(String[] args) { output1(); output2(); Type3 t3 = new Class01(); t3.f(); } }
输出结果:
正如代码的输出字符串描述的那样,output1在编译期就报错了;output2能够正确执行,只是什么也不输出;t3.f()也可以正常执行。
分析总结:
output1说明一项基本要求,即对于捕获被检查异常的 catch 子句,只有在相应的 try 子句可以抛出这些异常时才被允许;output2说明了这项要求不会应用到的冷僻案例;t3.f()说明了多个继承而来的throws 子句的交集,将减少而不是增加方法允许抛出的异常数量。
注:本【java解惑】系列均是博主阅读《java解惑》原书后将原书上的讲解和例子部分改编然后写成博文进行发布的。所有例子均亲自测试通过并共享在github上。通过这些例子激励自己惠及他人。同时本系列所有博文会同步发布在博主个人微信公众号搜索“爱题猿”或者“ape_it”方便大家阅读。如果文中有任何侵犯原作者权利的内容请及时告知博主以便及时删除如果读者对文中的内容有异议或者问题欢迎通过博客留言或者微信公众号留言等方式共同探讨。
源代码地址https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
相关文章推荐
- 【java解惑】java中那些反常识的小知识(续)
- 【java解惑】java中那些反常识的小知识
- 【java解惑】移位运算符规则
- 在eclipse和TortoiseGit中配置git连接remote服务器
- 【java解惑】整型溢出的循环控制变量
- 【java解惑】前缀自增自减和后缀自增自减问题
- 【java解惑】无处不在的bug
- 【java解惑】java字符串替换方法使用
- 【java解惑】字符串的字节数组构造函数使用
- 【java解惑】Unicode转义字符的使用(续)
- 【java解惑】Unicode转义符的使用
- 【java解惑】java字符串比较那些事儿
- 【java解惑】复合赋值与简单赋值
- 【java解惑】条件表达式结果类型规则
- 【java解惑】多重强转引发的问题
- 【java解惑】十六进制加法问题
- 【java解惑】长整数计算防止溢出
- 【java解惑】使用double进行小数运算
- Eclipse编译时Cannot run program "make":?????
- Eclipse调试之内存视图原理解析:调试开发者指南