在 Java 中,Error 和 Exception 都是用于处理异常情况的类,都是从Throwable继承而来。
异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。
如下图所示:

Error
Error是无法处理的异常,比如:OutOfMemoryError,一般发生这种异常,JVM会选择终止程序,因此我们编写程序时不需要关心这类异常。
Exception
Exception 类及其子类,表示程序运行过程中可以捕获、和处理的异常情况。
它们通常表示应用程序级别的问题,如:输入不合法、网络故障等。
具体为:NullPointerException、IndexOutOfBoundsException、ClassCastException….等等,这些异常是我们可以处理的异常。
Exception 主要分为: 可查的异常(checked exceptions) 、和 不可查的异常(unchecked exceptions)。
如下图所示:

1)红色为可查的异常(checked exceptions):编译器要求必须处置的异常;
比如:IOException就是典型的checked exceptions:
public void readFile() throws IOException {
FileReader file = new FileReader("somefile.txt");
BufferedReader fileInput = new BufferedReader(file);
// 代码
}
编译器强制程序必须捕获、或声明抛出这些异常。
2)绿色为不可查的异常(unchecked exceptions):编译器不要求强制处置的异常。
比如:NullPointerException 是 Java 中一种常见的未检查异常(Unchecked Exception):
public class NullPointerExample {
public static void main(String[] args) {
String text = null;
try {
int length = text.length(); // 这里会抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println("Caught NullPointerException: " + e.getMessage());
}
}
}
这种异常无需在编译时声明或捕获,但在编写健壮代码时,预防和处理 NullPointerException 是非常重要的。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。