在 Java 中,所有异常和错误都继承自 java.lang.Throwable,它分为两大分支:
-
Error(错误)
-
表示 JVM 无法处理的严重问题。
-
常见如
OutOfMemoryError,StackOverflowError。 -
一般不应该捕获或处理,而是避免或修复根本问题。
-
-
Exception(异常)
-
表示程序运行过程中出现的可处理事件。
-
主要分为两类:
-
Checked Exception(受检异常):
-
编译器强制要求处理(try-catch 或 throws)。
-
常见:
IOException,SQLException。 -
适合用来表示外部资源问题(文件、网络、数据库)。
-
-
Unchecked Exception(运行时异常,RuntimeException 及其子类):
-
编译器不强制处理。
-
常见:
NullPointerException,IndexOutOfBoundsException,IllegalArgumentException。 -
通常表示编程错误(逻辑错误、非法参数)。
-
-
-
问题
- 出现 OOM,JVM 一定会崩溃吗
- 结论:不一定,
OutOfMemoryError是Error,继承自Throwable,理论上可以被try-catch捕获。但通常也意味着JVM已经处于一种极其不稳定的状态,部分框架(如 Spring, Tomcat)在捕获到 OOM 后会主动关闭应用,避免“僵尸进程”。
- 结论:不一定,
- try-catch-finally 的执行顺序?
- try → catch → finally。
- finally 总会执行(除非
System.exit())。 - finally 中的 return 会覆盖 try/catch 的 return。