Java异常处理需区分检查型与非检查型异常,避免空catch和掩盖根因,优先捕获具体异常、记录带上下文的日志,用try-with-resources管理资源,并在异常转换时保留cause。
Java异常处理不是“加个try-catch就完事”,关键在于分清错误类型、明确处理责任、保持调用链清晰,并避免掩盖问题或破坏业务语义。
Java强制要求处理检查型异常(Checked Exception),如IOException、SQLException,它们代表可预期的外部问题;而非检查型异常(Unchecked Exception)(即RuntimeException及其子类)代表程序逻辑错误,如NullPointerException、IllegalArgumentException。
空catch块等于静默吞掉错误,printStackTrace()则缺乏上下文且不便于监控。生产环境必须记录有意义的日志,并考虑是否需要通知、重试或降级。
在分层架构中(如Service → DAO),上层不应暴露下层技术细节。但转换异常时需通过cause参数保留原始异常,否则丢失调试线索。
throw new ServiceException("下单失败", e);
throw new ServiceException("下单失败");(丢失
e)e.getCause()逐层追溯涉及InputStream、Connection、Statement等需显式关闭的资源,用try-with-resources替代手动close(),既简洁又避免因异常导致资源泄漏。
e.getSuppressed()获取)