ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在 Java 开发中,熟练使用工具类可以极大减少重复造轮子的工作。这些工具类通常位于 `java.util` 或 `java.lang` 包下,其方法全部为 `static`(静态),直接通过类名调用。 以下是 Java 中最常用的 **5 大核心工具类**及其高频方法汇总: ### Java 常用工具类及高频方法汇总 | **工具类** | **处理对象** | **核心高频方法** | **作用描述** | | --- | --- | --- | --- | | **`Arrays`** | **数组** | `asList()` | 将数组转为 List 集合 | | | | `sort()` / `parallelSort()` | 对数组进行排序(单线程/多线程) | | | | `stream()` | **(Java 8)** 将数组转为流进行处理 | | | | `toString()` | 将数组内容格式化为字符串用于打印 | | **`Collections`** | **集合(List/Set)** | `sort()` | 对 List 进行排序 | | | | `reverse()` | 反转集合中元素的顺序 | | | | `emptyList()` | 返回一个不可变的空 List(节省内存) | | | | `max()` / `min()` | 根据自然顺序找到最大/最小值 | | **`Objects`** | **任意对象** | `equals(a, b)` | **推荐:** 安全比较两个对象,防止空指针 | | | | `isNull(obj)` | 判断对象是否为 null | | | | `requireNonNull(obj)` | 检查对象是否为空,为空则抛出指定异常 | | **`String` / `StringUtils`**\* | **字符串** | `join()` | 将集合/数组通过指定符号连接成字符串 | | | | `format()` | 类似 C 语言,格式化生成字符串 | | | | `isBlank()` | **(Java 11+)** 判断字符串是否为空或全是空格 | | **`Math`** | **数学计算** | `abs()` | 计算绝对值 | | | | `max()` / `min()` | 比较两个数值的大小 | | | | `round()` / `ceil()` | 四舍五入 / 向上取整 | | | | `random()` | 生成 `[0.0, 1.0)` 之间的随机小数 | > **注\***: `StringUtils` 是 Apache Commons Lang 或 Spring 提供的工具类,非 JDK 原生,但在实际项目中使用频率甚至高于原生。 * * * ### 💡 深度理解:为什么使用这些工具类? 在没有工具类之前,我们需要手写很多防御性代码。看下面的对比: #### 场景:安全地比较两个对象 * **传统写法:** Java ~~~ // 这种写法如果 a 为 null 会报空指针异常 (NPE) if (a.equals(b)) { ... } // 这种写法虽然安全,但很啰嗦 if (a != null && a.equals(b)) { ... } ~~~ * **使用工具类:** Java ~~~ // 内部自动处理了 null 的情况,既优雅又安全 if (Objects.equals(a, b)) { ... } ~~~ * * * ### 🚀 进阶:Java 8 时间工具类 (java.time) 除了上述通用工具类,Java 8 引入的日期时间类其实也是一套非常强大的“工具体系”: | **类名** | **作用** | **常用方法** | | --- | --- | --- | | **`LocalDate`** | 处理日期 | `now()`, `of(2023, 10, 1)`, `plusDays(5)` | | **`LocalDateTime`** | 处理日期时间 | `now()`, `format(DateTimeFormatter)` | | **`Duration` / `Period`** | 计算时间差 | `between(start, end)` | ### 下一步建议 在实际的业务开发(如你最初提到的账单删除)中,**`Objects.equals()`** 和 **`Collections.emptyMap()`** 是非常实用的。 你想让我演示一下如何利用 `Objects.equals` 来替换你代码中那些手写的 `==` 或字符串判断吗?