Java 面试题
目录

Java 中 Checked Exception 和 Unchecked Exception 的区别是什么?

· 约 3 分钟读完 · 第 10 / 274 章

推荐答案

在 Java 中,异常分为两种主要类型:Checked Exception 和 Unchecked Exception。它们的区别主要体现在以下几个方面:

  1. 编译时检查:

    • Checked Exception:编译器会强制检查这类异常,要求程序员在代码中显式地处理(通过 try-catch 块)或声明抛出(通过 throws 关键字)。
    • Unchecked Exception:编译器不会强制检查这类异常,程序员可以选择处理或不处理。
  2. 继承关系:

    • Checked Exception:继承自 java.lang.Exception 类,但不包括 RuntimeException 及其子类。
    • Unchecked Exception:继承自 java.lang.RuntimeException 类。
  3. 典型示例:

    • Checked Exception:IOException、SQLException、ClassNotFoundException 等。
    • Unchecked Exception:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。
  4. 使用场景:

    • Checked Exception:通常用于表示程序外部环境可能引发的异常,如文件不存在、网络连接失败等。
    • Unchecked Exception:通常用于表示程序逻辑错误,如空指针、数组越界等。

本题详细解读

Checked Exception

Checked Exception 是那些在编译时被检查的异常。这意味着如果你在代码中调用了一个可能抛出 Checked Exception 的方法,编译器会强制你处理这个异常,要么通过 try-catch 块捕获并处理,要么通过 throws 关键字声明抛出。

例如,FileInputStream 的构造函数可能会抛出 FileNotFoundException,这是一个 Checked Exception。如果你不处理这个异常,代码将无法通过编译。

Unchecked Exception

Unchecked Exception 是那些在编译时不被检查的异常。它们通常表示程序中的逻辑错误,如空指针、数组越界等。由于这些异常通常是由程序员的错误引起的,编译器不会强制你处理它们。

例如,NullPointerException 是一个典型的 Unchecked Exception。如果你尝试访问一个空对象的成员变量或方法,程序会在运行时抛出这个异常。

总结

  • Checked Exception 需要在代码中显式处理或声明抛出,通常用于处理外部环境可能引发的异常。
  • Unchecked Exception 不需要显式处理,通常用于处理程序逻辑错误。

理解这两种异常的区别有助于编写更健壮和可维护的 Java 代码。