Java 异常处理:3 个 “避坑神操作”,告别崩溃式报错

做 Java 开发谁没踩过异常的坑?比如空指针直接让程序 "原地去世",try-catch 裹成 "千层饼",报错信息含糊到 debug 半小时找不到问题。今天分享 3 个最常用的异常处理技巧,代码简洁还实用,新手也能轻松拿捏~

1. 空指针防护:别再写一堆 if 判空!

日常开发中,空指针是最常见的异常。推荐用Objects.requireNonNullElse(Java 9+)或Optional类,一行搞定空值处理:

java 复制代码
import java.util.Objects;
import java.util.Optional;

public class ExceptionDemo {
    public static void main(String[] args) {
        String userName = null; // 模拟可能为空的参数
        Integer age = null;

        // 技巧1:Objects工具类(直接指定默认值)
        String safeName = Objects.requireNonNullElse(userName, "匿名用户");
        System.out.println("用户名:" + safeName); // 输出:匿名用户

        // 技巧2:Optional类(更灵活的空值处理)
        Integer safeAge = Optional.ofNullable(age)
                                 .orElse(18); // 为空则返回默认值18
        System.out.println("年龄:" + safeAge); // 输出:18

        // 进阶:为空时抛自定义异常
        Optional.ofNullable(userName)
                .orElseThrow(() -> new IllegalArgumentException("用户名不能为空!"));
    }
}

2. 多异常处理:别写 N 个 catch 块!

多个异常只需统一处理时,用 "|" 合并异常类型,代码瞬间清爽:

java 复制代码
// 技巧3:合并异常处理(避免重复代码)
public static void handleMultiException(String str) {
    try {
        Integer num = Integer.parseInt(str); // 可能抛NumberFormatException
        System.out.println("转换结果:" + num);
    } catch (NumberFormatException | NullPointerException e) {
        // 一个catch处理两种异常
        System.out.println("错误:输入参数无效!原因:" + e.getMessage());
    }
}

// 调用测试
public static void main(String[] args) {
    handleMultiException("abc"); // 抛NumberFormatException
    handleMultiException(null);  // 抛NullPointerException
}

二、关键注意事项

  1. 别用e.printStackTrace()!建议用日志框架(如 SLF4J)打印,方便定位问题;

  2. 自定义异常时,要包含详细的错误信息,别只抛 "发生异常" 这种无用提示;

  3. 不要滥用 try-catch,比如不需要处理的运行时异常(如 IndexOutOfBoundsException),不如让程序快速失败,便于排查问题。

相关推荐
时间静止不是简史1 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428044 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
金銀銅鐵6 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
福建佰胜张工7 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
catoop7 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x7 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
驭渊的小故事8 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客8 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1888 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn9 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc