Java 常见异常排查与修复实战指南
在 Java 开发中,异常处理是保证程序健壮性的关键环节。无论是刚入行的新人还是经验丰富的开发者,建立系统的异常排查思维都能显著提升代码质量。本文将系统梳理 Java 异常体系,深入剖析常见异常的触发场景、堆栈分析方法及修复策略,并结合最佳实践帮助你构建更安全的代码。
一、理解 Java 异常体系
1.1 异常的本质
异常(Exception)是程序运行过程中打断正常执行流程的事件。它本质上是一个对象,封装了错误类型、描述信息、方法调用堆栈以及可能的底层原因。
1.2 异常体系结构
java.lang.Object
└── java.lang.Throwable
├── java.lang.Error (JVM 严重错误,如 OutOfMemoryError)
└── java.lang.Exception
├── RuntimeException (运行时异常,编译时不强制处理)
└── Exception (受检异常,编译时必须处理)
- Error:JVM 级别的严重错误,通常无法处理。
- Exception:程序可处理的异常。
- 受检异常(Checked Exception):如
IOException、SQLException,编译时必须捕获或声明抛出。 - 运行时异常(RuntimeException):如
NullPointerException,通常由逻辑错误导致。
- 受检异常(Checked Exception):如
1.3 异常信息解读
一个典型的异常堆栈包含以下要素:
Exception java.lang.IllegalArgumentException: item quantity must be a number
at io.jzheaux.pluralsight.DeliController.orderSandwich (DeliController.java:45)
Caused by java.lang.NumberFormatException: For input string: " 3"
at NumberFormatException.forInputString (NumberFormatException.java:67)
- 异常类型:
IllegalArgumentException - 异常消息:
item quantity must be a number - 堆栈轨迹:从 main 到异常发生处的调用链
- Caused by:底层根本原因,通常是排查的关键入口
排查技巧:遇到复杂异常时,不要只看第一行,要顺着堆栈往下找,尤其是'Caused by'部分,那里往往藏着真正的原因。
二、运行时异常深度剖析
运行时异常(RuntimeException)通常由代码逻辑错误引起,下面逐个剖析最常见的几种。
2.1 NullPointerException(空指针异常)
这是 Java 中最著名的异常,占据了异常总数的很大比例。
出现场景:
- 直接调用 null 对象的方法或属性。
- 自动拆箱时包装类型为 null。
- 方法参数或返回值未做空检查。
- 数组元素未初始化。
示例:
;
text.length();
;
(willVote) {
System.out.println();
}


