背景故事

影片《金刚》是2005年上映的一部冒险电影,它讲述1933年的美国,一名勇于冒险的企业家及电影制作者,率领摄制队伍到荒岛拍摄,其中包括女主角安及编剧杰克,他们遇到恐龙及当地土著的袭击,安发出的尖叫声换来金刚的回应。这只巨大无比的猩猩,连凶悍的恐龙也惧怕它几分,偏偏它却钟情于安。安其后将金刚由荒岛带回纽约,但却是它悲剧命运的开始。后来金刚被抓到了城市。为保护爱人同军队战斗,金刚为了带安再看一次她曾说过美丽的日出,爬上了帝国大厦,使自己陷入困境,与人类的飞机展开了最后决战。最后它摔下了帝国大厦,为自己的爱人谱写了最后的悲歌。

try-catch之一矮矬穷泡妞

java程序猿也会碰到难以琢磨的try-catch,请看下面的例子

    public static void main(String[] args) {
try {
System.out.println("Hello world");
} catch(IOException e) {
System.out.println("抓到一个IO 异常!");
}
}

这段代码可以打印出什么?

可能不少人会说,这个不是很简单嘛?打印出:

Hello world

其实它压根编译都不能通过

报错情况

Unreachable catch block for IOException. This exception is never thrown from the try statement body

简单的说,就是try里没有能抛出IOException异常的语句,catch该异常就通不过编译。

JSL-11.2.3里规定了

It is a compile-time error if a method or constructor body can throw some exception class E when E is a checked exception class and E is not a subclass of some class declared in the throws clause of the method or constructor.

It is a compile-time error if a lambda body can throw some exception class E when E is a checked exception class and E is not a subclass of some class declared in the throws clause of the function type targeted by the lambda expression.

It is a compile-time error if a class variable initializer (§8.3.2) or static initializer (§8.7) of a named class or interface can throw a checked exception class.

It is a compile-time error if an instance variable initializer (§8.3.2) or instance initializer (§8.6) of a named class can throw a checked exception class,
unless the named class has at least one explicitly declared constructor and the exception class or one of its superclasses is explicitly declared in the throws clause of each constructor. It is a compile-time error if a catch clause can catch checked exception class E1 and it is not the case that the try block corresponding to the catch clause can throw a checked exception class that is a subclass or superclass of E1,
unless E1 is Exception or a superclass of Exception. It is a compile-time error if a catch clause can catch an exception class E1 and a preceding catch clause of the immediately enclosing try statement can catch E1 or a superclass of E1.

根据上面所述,矮矬穷泡妞本身都被排除掉了,只有有一项特长,才能泡妞!

最简单的方法是抛出一个异常或者子异常

import java.io.IOException;
public class TryCatchException {
public static void main(String[] args) {
try {
System.out.println("Hello world");
throw new IOException();//或者子异常,如throw new FileNotFoundException();
} catch(IOException e) {
System.out.println("抓到一个IO 异常!");
}
}
}

try-catch之二高富帅泡妞

那来看看这个吧!打印什么?

public class TryCatchException {

    public static void main(String[] args) {
try {
System.out.println("hello world!");
} catch(Exception e) {
System.out.println("捕获到异常");
}
}
}

可能不少人会说,不是和上面的一样嘛!会报编译异常。

哈哈,你掉到坑里了!它打印

hello world!

不管与其相对应的try子句的内容是什么,捕获Exception或者Throwable的catch语句是ok的,这点jsl并没有说清楚。

总之,高富帅泡妞总是很超脱的,很多妞也愿意倒扑!

try-catch之三泡妞技可以继承吗?

我们来看看异常如何继承的吧

public interface FileNotFound {
void run() throws FileNotFoundException;
} public interface CloneNotSupported {
void run() throws CloneNotSupportedException;
} public class TryCatchException implements FileNotFound,CloneNotSupported {
public static void main(String[] args) {
TryCatchException e=new TryCatchException();
e.run();
}
@Override
public void run() {
System.out.println("Hello world");
}
}

上面的程序可以编译通过吗?不少人会说,不能通过编译!原因:TryCatchException继承了FileNotFound和CloneNotSupported的方法,同事必然继承它的异常,故必须捕获这两个异常。

你再次避过了正确答案!可以正确编译,且打印出结果。

一个方法可以抛出的受检查异常的集合时它所适用所有类型声明要抛出的受检查异常的交集,而不是合集。

小结:

矮矬穷就别想着捕获少女心了,想着一项特长吧,比如富!

高富帅可以无所顾忌,无往不利。

泡妞只能最新化的继承,不用太担心。

参考资料

【1】java解惑

猿类如何捕获少女心--难以琢磨的try-catch的更多相关文章

  1. 一个少女心满满的例子带你入门canvas

    https://blog.csdn.net/sunshine940326/article/details/76572850 本文首发于我的个人博客:http://cherryblog.site/ gi ...

  2. 花果山第一届猿类分级考试实录--Talk is cheap,Show me the code

    本故事纯属虚构,如有雷同,纯属巧合! 故事背景 悟空师徒4人取经回来后,因不耐收到管教,就回到了花果山,带领一帮猴子猴孙逍遥自在的过日子,奈何因在阎王殿里将生死薄中的猴子猴孙的名字都划去了,猴子猴孙是 ...

  3. C#钩子类 几乎捕获键盘鼠标所有事件

    using System; using System.Text; using System.Runtime.InteropServices; using System.Reflection; usin ...

  4. 用Exception类捕获所有异常的技术是怎么用的?

    3.用Exception类捕获所有异常  马克-to-win:注意,一个事实是:Exception类是所有其他异常类的父类,所以Exception类能捕获所有的异常.马克-to-win:问题是用Exc ...

  5. C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

    重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...

  6. 创成汇丨投脑风暴·创心不止|路演日 第2期,寻IT创业者

    创成汇丨投脑风暴·创心不止|路演日 第2期   无畏荆棘之路的风雨 誓做浪潮之巅的勇者 你说,创业是一场孤注一掷的较量 你说,创新从来都是与过去battle 你还说,坚持总是比开始更让你难以琢磨 所以 ...

  7. mahout in Action2.2-聚类介绍-K-means聚类算法

    聚类介绍 本章包含 1 实战操作了解聚类 2.了解相似性概念 3 使用mahout执行一个简单的聚类实例 4.用于聚类的各种不同的距离測算方法 作为人类,我们倾向于与志同道合的人合作-"鸟的 ...

  8. PHP 面向对象编程和设计模式 (4/5) - 异常的定义、扩展及捕获

    PHP高级程序设计 学习笔记 2014.06.12 异常经常被用来处理一些在程序正常执行中遇到的各种类型的错误.比如做数据库链接时,你就要处理数据库连接失败的情况.使用异常可以提高我们程序的容错特性, ...

  9. 程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式

    前言 在贴吧看了个小说追了几天被删帖了,于是自己找书名,打算下载下来看,结果要么是需要充值,要么不提供下载.作为一个猿类,怎么能忍. 好在小说网站多入牛毛,有的采用js加载文字来防采集,有的用css图 ...

随机推荐

  1. 单纯的xlistview

    public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{ private ...

  2. 心里想的VS嘴上说的

    心里想的VS嘴上说的 背景:昨天开会,在招行总行那边,今天检讨下自己不会说话,真是太难了我! 一.昨日重现 现在回想起当时的场景觉得自己也真是搞笑,这都没死,太难了我.昨天下午在五楼开会,这也是我入职 ...

  3. Linux安装nfs共享文件

    简介nfs nfs网络文件系统常用于共享音视频,图片等静态资源.将需要共享的资源放到NFS里的共享目录,通过服务器挂载实现访问. 服务端安装: yum install -y nfs-utils rpc ...

  4. Android OTG之USB转串口模块通讯

    微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁. ...

  5. QMS 的趨勢概述

    自泰勒Taylor提出的科学管理被奉行后,制造业的分工已然成形,而产品不再是由工匠单独负责完成.为确保产品的质量,产品在完工后的检验为确保瑕疵品不外流出给客户的必要关卡.然而当产品依靠检验结果并无法减 ...

  6. HelloDjango 第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书 ...

  7. net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2

    目录 前言 引入 自定义属性 测试 小结 前言 前一篇讲到了中间层的使用,可能不是那么AOP,今天主要来说下一个轻量级的AOP第三方类库AspectoCore. 简单介绍下这个类库,AspectCor ...

  8. 使用CodeBenchmark对逻辑代码进行并发测试

    一直对性能测试比较感兴趣,所以也写了不少的测试工具有WebApiBenchmark和TcpBenchmark等;但这些工具测试都是有针对性和配置的方式来进行功能有限所以很难适用更多的场景,所以单独开发 ...

  9. 什么是W3C??

    为什么想着写这个博客呢,因为最近准备简历去面试,看到好多公司上面都写着熟悉 w3c ,很纳闷,我是一个新手,w3c是什么呢?没听过!!! 所以就去网上查了: 什么是W3C? W3C 万维网联盟(wor ...

  10. 设计模式(C#)——02工厂模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       在简单工厂模式中讲到简单工厂模式的缺点:难以扩展,一旦添加新运算就必须修改简单工厂方法.       工厂方法模式: ...