极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/6849[2018/7/6 9:36:18]
其中有些子类型,最好重点理解一下,比如 NoClassDefFoundError 和
ClassNotFoundException 有什么区别,这也是个经典的入门题目。
第二,理解 Java 语言中操作 Throwable 的元素和实践。掌握最基本的语法是必须的,如 try-
catch-finally 块,throw、throws 关键字等。与此同时,也要懂得如何处理典型场景。
异常处理代码比较繁琐,比如我们需要写很多千篇一律的捕获代码,或者在 finally 里面做一些资源
回收工作。随着 Java 语言的发展,引入了一些更加便利的特性,比如 try-with-resources 和
multiple catch,具体可以参考下面的代码段。在编译时期,会自动生成相应的处理逻辑,比如,
自动按照约定俗成 close 那些扩展了 AutoCloseable 或者 Closeable 的对象。
try (BufferedReader br = new BufferedReader(…);
BufferedWriter writer = new BufferedWriter(…)) {// Try-with-resources
// do something
catch ( IOException | XEception e) {// Multiple catch
// Handle it
}
知
识扩
展
前面谈的大多是概念性的东西,下面我来谈些实践中的选择,我会结合一些代码用例进行分析。
先开看第一个吧,下面的代码反映了异常处理中哪些不当之处?
try {
//
业务
代
码
// …
Thread.sleep(1000L);
} catch (Exception e) {
// Ignore it
}
这段代码虽然很短,但是已经违反了异常处理的两个基本原则。
第一,尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常,在这里是
Thread.sleep() 抛出的 InterruptedException。
这是因为在日常的开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,
所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐
评论0
最新资源