Difference between Error and Exception in Java

2025 年 5 月 7 日 | 阅读 4 分钟

异常(exception)的普遍含义是故意遗漏,而错误的(error)含义是不准确或不正确的行为。在 Java 中,Exception 和 Error 都是 java.lang 包下的 Throwable 类的子类。但它们之间存在一些显著的区别。因此,在本节中,我们将讨论错误和异常之间的关键区别

Exception Vs Error in Java

在继续本节之前,让我们先看看 Java Throwable 类的层次结构。

Exception Vs Error in Java

Exception

异常一词是异常事件的简称。它是在程序执行过程中发生的、打断程序指令正常流程的事件。这些是在编译时和运行时发生的错误。它们发生在开发人员编写的代码中。可以通过使用 try-catch 块和 throws 关键字来恢复。

异常有两种类型,即已检查异常(checked)和未检查异常(unchecked)。

在处理异常时,应牢记一些要点。

  • 检测到错误时,会抛出异常。
  • 任何抛出的异常都必须由异常处理程序捕获。
  • 如果程序员忘记提供异常处理程序,异常将被系统提供的“捕获所有”异常处理程序捕获。
  • 如果异常处理程序未能处理异常,则可以重新抛出该异常。

异常的优点

  • 它将错误处理代码与常规代码分开。
  • 它可以将错误报告向上层传递到方法调用堆栈。
  • 异常的分组或分类是类层次结构的自然结果。

让我们通过一个 Java 程序来理解异常。

异常示例

示例

让我们运行上面的程序,并故意输入一个浮点值来生成一个异常。

Exception Vs Error in Java

它显示了 **InputMismatchException**。因为程序接受一个整数值,所以我们看到下一条语句被跳过,程序终止。

Error

错误(Error)主要是由于系统资源不足而发生的问题。它们无法被捕获或处理。它们表示严重的问题。它们在运行时发生。它们总是未检查的。错误的示例是 **OutOfMemoryError、LinkageError、AssertionError** 等,它们都是 Error 类的子类。

让我们通过一个 Java 程序来理解错误。

错误示例

示例

编译并运行

输出

Exception Vs Error in Java

当我们执行上面的程序时,我们得到 **StackOverflowError**,这不是一个异常。

让我们讨论一下错误和异常之间的关键区别。

错误和异常的区别

在 Java 中,Error 和 Exception 都是 java.lang 包下的 Java Throwable 类的子类。

方面ErrorException
定义错误(Error)是运行时无法处理的意外事件。错误会导致程序终止。Java 中的异常(Exception)是程序中发生并中断其执行正常流程的问题。
类型错误(Error)有三种类型:语法错误、运行时错误和逻辑错误。异常(Exception)有两种类型:已检查异常未检查异常
可恢复性错误(Error)无法恢复。异常(Exception)可以通过 try-catch 块来恢复。
子类Throwable 类的子类。通过 Exception 类继承自 Throwable 类。
发生情况它发生在运行时。它发生在编译时或运行时。
所有错误(Error)都属于 java.lang.Error 包。所有异常(Exception)都属于 java.lang.Exception 包。
已知或未知编译器不会知道错误(Error)。只有已检查异常(Checked Exceptions)才会被编译器知道。
原因它主要由应用程序运行的环境引起。它主要由应用程序本身引起。
处理方式无法使用 try-catch 语句捕获或处理错误(Error)。可以使用 try-catch 语句捕获和处理异常(Exception)。
何时发生它主要由于硬件故障或 JVM 限制等环境问题而产生。它由于程序中的逻辑错误或无效操作而发生。
处理意图这些不是为应用程序开发人员设计的。这些是为了让应用程序开发人员处理,以维护程序流程。
示例java.lang.StackOverFlowError, java.lang.OutOfMemoryError已检查异常:SQLException, IOException
未检查异常:ArrayIndexOutOfBoundsException, NullPointerException, ArithmaticException