Java 12 是一个非长期支持(Non-LTS)版本,于 2019 年 3 月发布,引入了一些实用的新特性和改进。以下是 Java 12 的使用教程,包括环境配置、新特性示例和基本使用方法:
访问 Oracle 官网 或 AdoptOpenJDK 下载 Java 12 安装包。
安装完成后,配置环境变量:
Windows:设置 JAVA_HOME 为安装路径,将 %JAVA_HOME%\bin 添加到 Path。
Linux/macOS:在 .bashrc 或 .zshrc 中添加:
export JAVA_HOME=/path/to/jdk-12
export PATH=$JAVA_HOME/bin:$PATH验证安装:
java -version # 应显示 "openjdk version "12.x.x"" 或类似信息Java 12 引入了 switch 表达式的预览功能,支持简化的语法和返回值:
// 传统 switch 语句(Java 8)
int numLetters;
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
default:
numLetters = 0;
}
// Java 12 简化的 switch 表达式
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> 0;
};注意:使用预览特性需在编译和运行时添加参数:
javac --enable-preview -source 12 Example.java
java --enable-preview ExampleCompactNumberFormat)新增 java.text.CompactNumberFormat 类,支持将大数字格式化为紧凑形式(如 “1K” 表示 1000):
import java.text.NumberFormat;
import java.util.Locale;
public class CompactNumberExample {
public static void main(String[] args) {
// 美国 locale 示例
NumberFormat nf = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT
);
System.out.println(nf.format(1000)); // 输出 "1K"
System.out.println(nf.format(1500000)); // 输出 "1.5M"
// 中文 locale 示例
NumberFormat cnNf = NumberFormat.getCompactNumberInstance(
Locale.CHINA, NumberFormat.Style.SHORT
);
System.out.println(cnNf.format(10000)); // 输出 "1万"
}
}Collectors.teeing() 允许对 Stream 进行两次不同的收集操作,并将结果合并:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TeeingExample {
public static void main(String[] args) {
// 计算列表中数字的总和与平均值
var result = Stream.of(1, 2, 3, 4, 5)
.collect(Collectors.teeing(
Collectors.summingInt(n -> n), // 第一个收集器:求和
Collectors.averagingInt(n -> n), // 第二个收集器:求平均值
(sum, avg) -> "Sum: " + sum + ", Avg: " + avg // 合并结果
));
System.out.println(result); // 输出 "Sum: 15, Avg: 3.0"
}
}Java 12 简化了 JMH(Java Microbenchmark Harness)的使用,可直接通过 jdk.incubator.benchmark 模块编写基准测试:
import jdk.incubator.benchmark.Benchmark;
import jdk.incubator.benchmark.BenchmarkLoop;
public class MyBenchmark {
@Benchmark
public void testMethod() {
// 待测试的代码
int sum = 0;
for (int i = 0; i < 1000; i++) {
sum += i;
}
}
public static void main(String[] args) {
BenchmarkLoop.run(MyBenchmark.class);
}
}运行时需添加模块依赖:
java --add-modules jdk.incubator.benchmark MyBenchmark.java默认 CDN 加速:JDK 内部资源加载默认使用 CDN 加速,提升网络资源获取效率。
JVM 优化:
Shenandoah 垃圾收集器(实验性),旨在低延迟回收大堆内存。G1 收集器,支持并行 Full GC,提升大型应用性能。单文件程序运行:延续 Java 11 的特性,可直接运行 .java 文件(无需先编译):
java MyProgram.java--enable-preview),且可能在后续版本中修改。通过以上内容,你可以快速上手 Java 12 并体验其新特性。如需深入学习,建议参考 Oracle 官方文档 或相关技术博客。