以下是结合 Java 17+ 新特性的 Java 基础类实操指南,包含核心类库的现代化用法、实战案例及最佳实践:
1. 开发环境配置(Java 17+)
推荐工具链:
- JDK 17+:下载 OpenJDK 17 LTS 或 GraalVM(支持 AOT 编译)
- Maven 3.8+ / Gradle 7+:依赖管理
- VS Code 或 IntelliJ IDEA 2023:IDE 配置(启用预览特性)
快速配置示例(Maven):
<!-- pom.xml -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<release>17</release>
</properties>
2. 基础数据类型增强
(1) 文本块(Text Blocks)
// Java 17+ 多行字符串
String json = """
{
"name": "Doubao",
"age": 2025
}
""";
(2) 包装类优化
// 自动装箱/拆箱
Integer num = 100; // 自动装箱
int unwrapped = num; // 自动拆箱
// 数字格式化(Java 12+)
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
System.out.println(fmt.format(1000000)); // 输出 "1M"
3. 字符串处理进阶
(1) 字符串模板(预览特性)
// Java 21+ 字符串模板
String name = "World";
String message = STR."Hello, \{name}!";
(2) 字符串转换
// 字符串与数组互转
String str = "Hello";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
String fromBytes = new String(bytes, StandardCharsets.UTF_8);
// 字符串分割(Java 11+)
String[] parts = "a,b,c".split(",", 2); // [a, b,c]
4. 集合框架新特性
(1) 不可变集合
// 创建不可变集合(Java 9+)
List<String> immutableList = List.of("A", "B", "C");
Set<Integer> immutableSet = Set.of(1, 2, 3);
Map<String, Integer> immutableMap = Map.of("one", 1, "two", 2);
(2) Stream API 增强
// 集合过滤与转换
List<String> names = List.of("Alice", "Bob", "Charlie");
List<String> filtered = names.stream()
.filter(name -> name.length() > 4)
.map(String::toUpperCase)
.toList(); // [ALICE, CHARLIE]
// 并行流(适合 CPU 密集型任务)
long count = names.parallelStream()
.filter(name -> name.startsWith("A"))
.count();
(3) 新集合操作
// Map 计算(Java 8+)
Map<String, Integer> map = new HashMap<>();
map.compute("key", (k, v) -> v == null ? 1 : v + 1);
// List 排序(Java 8+)
List<Integer> numbers = Arrays.asList(3, 1, 4);
numbers.sort(Integer::compareTo); // [1, 3, 4]
5. 异常处理改进
(1) 增强的 switch 表达式
// Java 14+ 异常处理
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
switch (e.getMessage()) {
case "/ by zero" -> System.err.println("除数不能为零");
default -> e.printStackTrace();
}
}
(2) 密封类(Sealed Classes)
// Java 17+ 限制异常继承
public sealed interface MyException permits SpecificException, AnotherException {
// 接口定义
}
6. IO 与文件操作
(1) Path 与 Files 类
// Java 7+ NIO.2 API
Path path = Path.of("data.txt");
// 读取文件(Java 11+)
String content = Files.readString(path, StandardCharsets.UTF_8);
// 写入文件(Java 11+)
Files.writeString(path, "Hello, Doubao!", StandardCharsets.UTF_8);
(2) 异步文件操作
// Java 15+ 异步文件通道
AsynchronousFileChannel channel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);
Future<Integer> result = channel.read(ByteBuffer.allocate(1024), 0);
7. 实战案例:数据处理工具
以下是一个使用 Java 17+ 特性实现的 CSV 数据分析工具:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class DataAnalyzer {
public static void main(String[] args) {
try {
// 读取 CSV 文件
Path path = Path.of("data.csv");
List<String> lines = Files.readAllLines(path);
// 解析数据并计算平均值(跳过表头)
Map<String, Double> avgByCategory = lines.stream()
.skip(1) // 跳过表头
.filter(line -> !line.isEmpty())
.map(line -> line.split(","))
.filter(parts -> parts.length >= 2)
.collect(Collectors.groupingBy(
parts -> parts[0], // 按第一列分组
Collectors.averagingDouble(parts -> Double.parseDouble(parts[1]))
));
// 输出结果
avgByCategory.forEach((category, avg) -> {
System.out.printf("%s: 平均值 = %.2f%n", category, avg);
});
} catch (IOException e) {
System.err.println("文件读取错误: " + e.getMessage());
}
}
}
8. 性能优化建议
- 字符串拼接:优先使用
StringBuilder
或 Java 17+ 的文本块。 - 集合操作:避免在循环中频繁扩容集合,使用
ArrayList(initialCapacity)
预分配空间。 - Stream 优化:对大数据集使用并行流,但需注意线程安全。
- 内存管理:使用
var
关键字减少冗余类型声明(Java 10+)。
9. 常用类库推荐
- Jackson:JSON 处理(
jackson-databind
) - Apache Commons Lang:字符串、集合工具类
- Project Lombok:减少样板代码(@Data, @Builder)
- Vavr:函数式编程库(不可变集合、模式匹配)
通过上述内容,你可以快速掌握 Java 基础类的现代用法,并结合实际案例进行开发实践。建议在 IDE 中创建一个 Maven 项目,逐步实现上述代码片段,加深对 Java 核心类库的理解。
Java 基础,Java 入门,Java 精通,Java 实操,Java 类库,面向对象编程,Java 开发,数据类型,控制语句,数组,集合框架,异常处理,多线程,IO 流,Java 常用类
资源地址:
https://pan.quark.cn/s/14fcf913bae6