Java中通过标准异常类、日志框架、工具库等提供全方位异常处理支持:1. java.lang包定义Exception、RuntimeException等基础异常;2. Log4j、SLF4J等日志框架记录异常堆栈;3. Apache Commons Lang提供异常信息提取工具;4. Google Guava的Preconditions用于前置条件校验;5. Thread.UncaughtExceptionHandler和Spring Boot的@ControllerAdvice实现全局异常处理,结合使用可提升程序健壮性与可维护性。

Java中常用的类库提供了多种工具来处理和分析异常,帮助开发者更高效地定位问题、记录错误信息以及提升程序的健壮性。以下是一些主流支持异常处理与诊断的工具和类库。
1. 标准异常类(java.lang 包)
Java语言本身在java.lang包中定义了核心异常类,是所有异常处理的基础:
- Exception:所有检查异常的基类。
- RuntimeException:运行时异常基类,如NullPointerException、IndexOutOfBoundsException。
- Error:系统级错误,如OutOfMemoryError、StackOverflowError,通常不被捕获。
- Throwable:异常和错误的共同父类,提供printStackTrace()等关键方法。
2. 日志框架(如 Log4j、SLF4J、Logback)
日志工具能捕获并记录异常堆栈信息,便于事后排查:
- Log4j / Logback:可将异常完整堆栈写入日志文件,支持异步输出和分级控制。
- SLF4J:作为日志门面,统一不同日志实现的接口,方便在异常处理中使用logger.error("message", exception)输出详细信息。
3. 异常增强工具(Apache Commons Lang)
org.apache.commons:commons-lang3 提供了实用的异常处理辅助方法:
立即学习“Java免费学习笔记(深入)”;
本文档主要讲述的是eclipse maven工程配置说明;编写本文的目的解决因环境问题带来的一系别问题,比如类没找到异常,JAR新旧并成,导致有些方法不可用,支持热拔插式的修改,当调试程序时,修改后不用重启tomcat等问题;感兴趣的朋友可以过来看看
- ExceptionUtils.getStackTrace():获取异常堆栈的字符串形式。
- ExceptionUtils.getRootCause():提取最根本的异常原因。
- ExceptionUtils.getStackTraceElementList():将堆栈转为列表便于分析。
4. 断言与条件检查(Google Guava)
Guava 的 Preconditions 类可在代码入口处主动抛出异常,预防错误扩散:
- checkNotNull():防止空值,抛出NullPointerException。
- checkArgument():验证参数合法性,抛出IllegalArgumentException。
- checkState():检查对象状态是否合理。
5. 全局异常处理机制
Java提供机制捕获未处理异常:
- Thread.UncaughtExceptionHandler:设置线程未捕获异常的处理器,避免主线程外的异常导致静默失败。
- Spring Boot @ControllerAdvice:结合@ExceptionHandler统一处理Web层异常,返回友好响应。
基本上就这些。从基础异常类到高级日志和工具库,Java生态提供了层层递进的支持,关键是根据场景选择合适方式,让异常可追踪、可恢复、可维护。不复杂但容易忽略的是细节处理,比如始终保留原始异常链、避免吞掉异常信息。








