Exception和Error
...大约 2 分钟Java基础Exception
在 Java 中,Exception
和 Error
都是 Throwable
类的子类(只有继承了 Throwable
类的实例才可以被 throw
或者被 catch
)。它们表示在程序运行时发生的异常或错误情况。
总结来看:Exception
表示可以被处理的程序异常,Error
表示系统级的不可恢复错误。
详细说明:
- Exception:表示程序中可以处理的异常情况,通常是由于程序逻辑或外部环境中的问题引起的,可以通过代码进行恢复或处理。
常见的子类有:IOException
、SQLException
、NullPointerException
、IndexOutOfBoundsException
等。
Exception
又分为 Checked Exception(编译期异常)和 Unchecked Exception(运行时异常)。
- Checked Exception:在编译时必须进行处理(例如使用
try-catch
块或通过throws
声明抛出),例如IOException
。 - Unchecked Exception:运行时异常,不需要显式处理,常见的如
NullPointerException
、IllegalArgumentException
等,继承自RuntimeException
。
- Error:表示严重的错误,通常是 JVM 层次内系统级的、无法预料的错误,程序无法通过代码进行处理或恢复。例如内存耗尽(
OutOfMemoryError
)、栈溢出(StackOverflowError
)。Error
不应该被程序捕获或处理,因为一般出现这种错误时,程序无法继续运行。
这个解释清晰地说明了 Java 中 Exception
和 Error
的区别,强调了它们在 Java 应用程序中的角色以及如何处理它们。
异常处理时需要注意的点:
Exception
)
1. 尽量不要捕获通用的异常(如 - 例如,只捕获
IOException
或SQLException
,而不是捕获所有类型的异常。
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;
}