Exception和Error的理解

Exception和Error的理解

今日感悟:越是厉害的人,代码越容易理解

问题:

  • 请对比Exception和Error的区别,另外,运行时异常和一般异常有什么区别?

知识点分析:

一. 首先来个简单的类图感受一下Throwable、Exception、Error的设计和分类:

从上图中可以看出Exception和Error都是继承Throwable,也就是中Java中只有Throwable类型的实例才可以被抛出(Throw)或者捕获(catch)。

二. 掌握最基本的语法。如try-catch-finally块、throw、throws关键字等。同时懂得如何处理典型场景。

知识点补充:

随着Java语言的扩展,引入了一些更加便利的特性,try-with-resources和multiple catch。具体我这里引用了RxJava和Retorfit结合源码的一段。在编译时期,会自动生成相应的处理逻辑,比如:自定义AutoCloseable实现(AutoCloseable不了解的可以参考文章Java7中的Try-with-resources

//代码路径:
package retrofit2.adapter.rxjava2.CallExecuteObservable

@Override protected void subscribeActual(Observer<? super Response<T>> observer) {
   //省略逻辑
   ...
   
    try {
    //划重点了,这里没有贴代码,感兴趣自己调式execute方法 
      Response<T> response = call.execute();
      if (!disposable.isDisposed()) {
        observer.onNext(response);
      }
      if (!disposable.isDisposed()) {
        terminated = true;
        observer.onComplete();
      }
    } catch (Throwable t) {
    //划重点了,跟随优秀的开源框架一步步进去,你会发现它遵循了:
    //1.尽量捕获具体异常,不要捕获Throable或者Error //2.不生吞(swallow)异常
    //3.throw early
    //4.仅仅捕获必要代码块,try-catch会产生额外的性能开销
      Exceptions.throwIfFatal(t);
      if (terminated) {
        RxJavaPlugins.onError(t);
      } else if (!disposable.isDisposed()) {
        try {
          observer.onError(t);
        } catch (Throwable inner) {
          Exceptions.throwIfFatal(inner);
          RxJavaPlugins.onError(new CompositeException(t, inner));
        }
      }
    }
  }
复制代码

回答问题:

这边就不写了,根据上面类图和文字补充,各自组织语言吧(重要的是自己要有深度思考能力)

参考:http://ifeve.com/java-7%E4%B8%AD%E7%9A%84try-with-resources/ ,极客时间APP核心技术第二讲|Exception和Error有什么区别、retrofit2.adapter.rxjava2部分源码

声明:此为原创,转载请联系作者


作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。

当然喜爱技术,乐于分享的你也可以可以添加作者微信号:

转载于:https://juejin.im/post/5b5987b0f265da0f955cd935

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101525.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm激活码永久破解[最新免费获取]

    (pycharm激活码永久破解)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

  • Ubuntu 20.04 安装 Docker

    Ubuntu 20.04 安装 Docker检查Ubuntu内核docker需要ubuntu的内核高于3.10uname-rDocker安装#新增更新源sudoecho”debhttps://download.docker.com/linux/ubuntuzestyedge”>/etc/apt/sources.list#step1:安装必要的一些系统工具sudoapt-getupdatesudoapt-get-yinstallapt-transport-httpsca-certi

  • Jenkins(8)构建触发器之定时构建和轮询 SCM

    Jenkins(8)构建触发器之定时构建和轮询 SCM前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

  • PostgreSQL数据库备份和恢复

    PostgreSQL数据库备份和恢复一、备份1、cmd到PostgreSQL安装目录bin下2、备份命令pg_dump-h192.168.100.23-Upostgrespostgres>D:\postgres.bak3、指令解释如上命令,pg_dump是备份数据库指令;10.194.227.231是数据库的ip地址;postgres是数据库的用户名;postgres是数据库名;>意思是导出到指定目录;4、图文并茂备份二、恢复1、备份命令psql

  • Mac idea激活码【2022免费激活】2022.02.20

    (Mac idea激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlLGWSVFD4PZ-eyJsaWN…

  • c++ fstream流seekg()重定位问题

    c++ fstream流seekg()重定位问题  在看c++中fstream时,突然想到一个问题。当读取完整个文件之后如果再想读取一遍该如何去写?首先想到seekg()函数把读指针重定位到文件开头。但是我试了一下发现指针并没有移动,后来才搞清楚原来是当读指针指到EOF后就没办法再进行指针的控制了。#include&lt;iostream&gt;#include&lt;fstream&gt;#include&lt;string&g…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号