博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Exception和Error的理解
阅读量:6881 次
发布时间:2019-06-27

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

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

问题:

  • 请对比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不了解的可以参考文章)

//代码路径:package retrofit2.adapter.rxjava2.CallExecuteObservable@Override protected void subscribeActual(Observer
> observer) { //省略逻辑 ... try { //划重点了,这里没有贴代码,感兴趣自己调式execute方法 Response
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

你可能感兴趣的文章
PostgreSQL各命令行工具功能说明
查看>>
关于后台接收参数为null的问题之ajax--contentType
查看>>
基于IDEA的JavaWeb开发环境搭建
查看>>
JAVA中如何将一个json形式的字符串转为json对象或对象列表
查看>>
Dynamics4.0和Dynamics2011处理Email的方法
查看>>
LeetCode: Regular Expression Matching 解题报告
查看>>
表数据文件DBF的读取和写入操作
查看>>
前后端分离趋势谈
查看>>
指针和引用的区别
查看>>
nyoj259茵茵的第一课
查看>>
不定长内存池之apr_pool
查看>>
二维“有序”数组查找问题的解决
查看>>
【转】更改语言
查看>>
ORACLE 归档日志打开关闭方法
查看>>
requests的content与text导致lxml的解析问题
查看>>
反射如何破坏单例模式
查看>>
A* Pathfinding Project4.2.0
查看>>
安卓学习第一节--环境搭建及Android Studio 安装
查看>>
SQL2005中的DATENAME函数
查看>>
网站形象与企业发展潜力 -- 由上海地铁10号线发生追尾事故说开去
查看>>