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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 键盘输入多种方法

    java 键盘输入多种方法一、java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象。常用的类有BufferedReader,Scanner。实例程序:1、利用Scanner实现从键盘读入integer或float型数据//importjava.io.*;importjava.util.*;publicclassInputTest{publicstaticv

    2022年7月8日
    18
  • pageruler蛋白marker_蛋白marker上样量

    pageruler蛋白marker_蛋白marker上样量下载软件(其实就是一堆脚本)gitclonehttps://github.com/jhcepas/eggnog-mapper.git下载数据库aliaspython=/usr/bin/python2.7pythondownload_eggnog_data.py拆分蛋白文件xx.faaawk’!/^>/{printf”%s”,$0;n=”\…

    2025年7月27日
    3
  • 封装是怎么实现的_ad13怎么添加封装

    封装是怎么实现的_ad13怎么添加封装1.封装的概念(1)将东西包装在一起,然后以新的完整的形式呈现出来(即将属性和方法封装到类里面,通过添加访问修饰符来限制访问权限,以达到信息隐藏的目的)(2)信息隐藏:隐藏对象的实现细节,不让外部

    2022年8月1日
    5
  • pycharm2021.11.3激活补丁_最新在线免费激活

    (pycharm2021.11.3激活补丁)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    70
  • 常用的几款抓包工具[通俗易懂]

    常用的几款抓包工具[通俗易懂]常用的几款抓包工具!标签:软件测试软件测试方法软件测试学习原创来自于我们的微信公众号:软件测试大师最近很多同学,说面试的时候被问道,有没有用过什么抓包工具,其实抓包工具并没有什么很难的工具,只要你知道你要用抓包是干嘛的,就知道该怎么用了!一般对于测试而言,并不需要我们去做断点或者是调试代码什么的,只需要用一些抓包工具抓取发送给服务器的请求,观察下它的请求时间还有发送内容等等,…

    2022年6月11日
    51
  • Java集合篇:ConcurrentHashMap详解(JDK1.6)

    Java集合篇:ConcurrentHashMap详解(JDK1.6)

    2021年10月4日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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