版本:基于 Java 17 & Java 21 LTS

在掌握了面向对象的核心思想后,接下来的重点是学会使用 Java 标准库中提供的强大工具。本篇将聚焦于开发中最常用的 API,并重点介绍现代 Java (8+) 带来的革新。


1. 字符串处理 (String, StringBuilder)

1.1 现代 String 新方法 (Java 11+)

var str = "  Java 21  ";
System.out.println(str.isBlank());      // 判断是否为空白(全空格也算)
System.out.println(str.strip());        // 去除首尾空格(比 trim() 更智能,支持 Unicode)
System.out.println("Hi ".repeat(3));    // 重复字符串

1.2 字符串拼接

如果是频繁拼接,请使用 StringBuilder 以获得更好的性能。


2. 现代日期时间 API (java.time)

请彻底抛弃陈旧的 Date 类。Java 8 引入的 java.time 包是线程安全且易于使用的。

import java.time.*;
import java.time.format.DateTimeFormatter;

// 1. 获取当前时间
var now = LocalDateTime.now();

// 2. 自定义格式化
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(now.format(formatter));

// 3. 计算时间差
var start = LocalDate.of(2024, 1, 1);
var end = LocalDate.now();
Period period = Period.between(start, end);
System.out.println("相差月数: " + period.getMonths());

3. 数学与工具类 (Math, BigDecimal)

3.1 Math 类常用方法

Math.abs(-10);     // 绝对值
Math.max(10, 20);  // 最大值
Math.sqrt(16);     // 开平方
Math.random();     // [0.0, 1.0) 随机数

3.2 浮点数精确计算:BigDecimal

在涉及金融、货币计算时,严禁使用 float 或 double,必须使用 BigDecimal

import java.math.BigDecimal;
import java.math.RoundingMode;

var a = new BigDecimal("0.1");
var b = new BigDecimal("0.2");
var sum = a.add(b); // 0.3

// 除法需指定精度和舍入模式,否则可能抛出 ArithmeticException
var div = a.divide(b, 2, RoundingMode.HALF_UP);

4. Optional:优雅处理空指针 (Java 8+)

Optional 类提供了一种显式处理“值可能为空”的方法。

import java.util.Optional;

var user = Optional.ofNullable(findUser());
user.ifPresent(u -> System.out.println("用户存在: " + u));
String name = user.orElse("默认用户");

5. 生成随机数:Random 与 ThreadLocalRandom

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

// 现代写法:线程安全的随机数生成
int randomInt = ThreadLocalRandom.current().nextInt(1, 101); // [1, 100]

本章小结

第六篇我们深度学习了:

  1. 现代 String 的高效操作与新方法。

  2. 彻底替代旧版日期类的 java.time API。

  3. BigDecimal:金融级精确计算的标配。

  4. 使用 Optional 优雅地终结空指针风险。

  5. 多线程环境下的随机数生成。

下一篇预告:异常处理与资源管理 (Try-with-resources, 异常链)