Exception和Error

tim-qtp...大约 2 分钟Java基础Exception

在 Java 中,ExceptionError 都是 Throwable 类的子类(只有继承了 Throwable 类的实例才可以被 throw 或者被 catch)。它们表示在程序运行时发生的异常或错误情况。

总结来看:Exception 表示可以被处理的程序异常,Error 表示系统级的不可恢复错误

详细说明:

  1. Exception:表示程序中可以处理的异常情况,通常是由于程序逻辑或外部环境中的问题引起的,可以通过代码进行恢复或处理。

常见的子类有:IOExceptionSQLExceptionNullPointerExceptionIndexOutOfBoundsException 等。

Exception 又分为 Checked Exception(编译期异常)和 Unchecked Exception(运行时异常)。

  • Checked Exception:在编译时必须进行处理(例如使用 try-catch 块或通过 throws 声明抛出),例如 IOException
  • Unchecked Exception:运行时异常,不需要显式处理,常见的如 NullPointerExceptionIllegalArgumentException 等,继承自 RuntimeException
  1. Error:表示严重的错误,通常是 JVM 层次内系统级的、无法预料的错误,程序无法通过代码进行处理或恢复。例如内存耗尽(OutOfMemoryError)、栈溢出(StackOverflowError)。Error 不应该被程序捕获或处理,因为一般出现这种错误时,程序无法继续运行。

这个解释清晰地说明了 Java 中 ExceptionError 的区别,强调了它们在 Java 应用程序中的角色以及如何处理它们。

异常处理时需要注意的点:

1. 尽量不要捕获通用的异常(如 Exception

  • 例如,只捕获 IOExceptionSQLException,而不是捕获所有类型的异常。
try {
    // 执行文件操作
} catch (IOException e) {
    // 处理特定的IO异常
} catch (Exception e) {
    // 如果真需要捕获一般异常,可以放在最后,捕获未知错误
}

2. logger.error() 做日志保存

  • 捕获异常后,至少记录异常信息(例如日志),甚至可以重新抛出异常以便让上层调用者继续处理。
  • e.printStackTrace() 只是打印,不会进行日志保存。
try {
    // 执行可能抛出异常的代码
} catch (IOException e) {
    // 记录异常信息
    logger.error("IO Error occurred", e);
    // 重新抛出异常或做适当处理
    throw e;
}