Java异常:Exception与Error,checkedException与unCheckedException
1. Java异常类层级结构图
java.lang.Throwable
是Java异常的顶级接口,Exception
和Error
均继承自Throwable
。
2. Exception和Error有什么区别?
- Exception:程序本身可以处理的异常,可以通过
try-catch
进行捕获。Exception
又可分为CheckedException
(受检异常)和unCheckedException
(非受检异常)。 Error
:程序本身无法处理的异常,无法通过不建议通过catch
进行捕获catch
进行捕获。例如上图展示的OutOfMemoryError
。这类异常发生时,会导致程序终止运行(线程终止)。
3. CheckedException
和unCheckedException
有什么区别?
二者只是逻辑上的分类,并不存在
CheckedException
或unCheckedException
接口或类
CheckedException
即受检查异常:Java代码在编译过程中,如果受检查异常没有被catch
或者throws
关键字处理的话,就没法通过编译。除了RuntimeException
及其子类,其他的Exception
类及其子类都是受检查异常,常见的有:IoException
、ClassNotFoundException
、SQLException
等。unCheckedException
即非受检查异常:Java代码在编译过程中,即使我们不对其进行处理,编译也可以通过。RuntimeException
及其子类都是非受检查异常,常见的有:NullPointException
、IllegalArgumentException
、NumberFormatException
等。
4. Throwable
有哪些常用方法?
String getMessage()
:返回异常描述信息
void printStackTrace()
:在控制台打印Throwable
对象封装的异常信息
5. try-with-resources
代替try-catch-finally
进行资源释放
try-with-resources
是JDK1.7推出的一种资源释放的方式。
- 适用范围:资源的定义,任何实现
java.lang.AutoCloseable
或java.lang.Closeable
接口的对象。 - 关闭资源和finally块的执行顺序:在
try-with-resources
语句中,任何catch或finally块在声明的资源关闭后运行。 - 使用说明:只需在
try
后面跟上小括号()
括号中对资源进行定义,无需使用finally
手动释放资源。
《Effective Java》中明确指出:
面对必须要关闭的资源,我们总是优先使用
try-with-resources
而不是finally
。随之产生的代码更简短,更清晰。
Java中类似于InputStream
、OutputStream
、Scanner
、PrintWriter
等资源都需要我们调用close()
方法进行手动关闭资源,一般情况下我们可以使用try-catch-finally
来实现:
1 | Scanner scanner = null; |
JDK1.7后使用try-with-resources
实现:
1 | try (Scanner scanner = new Scanner(new File("read.txt"))){ |
涉及到多个资源的定义,使用分号;
进行分隔
1 | try (Scanner scanner = new Scanner(new File("read.txt")); |
相关文章
-
2022-05-11