Java Exceptions & Errors
1. Java 异常类的层次结构
图片摘自 Simple Snippets
从图中可以看出, Exceptions 类和 Errors 类都继承于 Throwable 类。
2. Java Exception
直接上源码(摘自 JDK 11.0.10 )
1 | public class Exception extends Throwable { |
在 Exception(异常) 类中,可以分为 Check Exceptions 和 Uncheck Exceptions(Runtime Exception) 。异常可由程序自行处理。其中检查异常是在程序编写过程中必须处理的(不处理无法通过编译),不受检查异常在编译过程中无法发现。
2.1 Check Exceptions
这类异常必须由 try / catch 进行捕获,如果不进行捕获,则不能通过编译。常见的 Check Exceptions有: IOException / ClassNotFoundExcepiton / SQLException / …
2.2 Uncheck Exceptions
RuntimException及其子类都属于 Uncheck Exception。常见的 Uncheck Exception 有:NullPointerException、NumberFormatException(字符串转换为数字)、ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类型转换错误)、ArithmeticException(算术错误)
3. Errors
Error:Error属于程序无法处理的错误,这类错误无法用 catch来进行捕获。比如 JVM 虚拟机错误 / JVM 虚拟机内存不足 / 类定义错误 / … 当发生这种异常时, JVM 一般会线程终止。
4. try - catch -finall
try: 用于执行可能出现异常的代码块,后面会跟着[0-n]个catch块catch: 用于处理try块中捕获到的异常finally: 用于之后的工作,不论是否抛出异常,finally块内的代码都会被执行
特殊情况(finally 块不执行): – 参考 Java Guide Blog
在
try或finally块中用了System.exit(int)退出程序。如果System.exit(int)在异常语句之后,finally还是会被执行程序所在的线程死亡
CPU 关闭
5. try - with - resources
相较于 try - catch 语句 try - with - resources主要用于关闭资源(即实现 java.lang.AutoCloseable或者 java.io.Closeable 的对象)
如果有多个资源需要关闭时,多个资源之间需要使用 分号 分隔。





