Appearance
Java
Copy on Write 写时复制
Helloworld
java
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}运行程序
bash
# Java 编译器将源代码编译成字节码文件
javac HelloWorldApp.java
# 启动 JVM 并类加载字节码文件
java HelloWorldApp- 类加载器 父委托机制 CLASSPATH
- Java 类加载器层级
Java 版本特性预览
注意:Java 1.x 的命名法只用到 Java 8(1.8),所以从 Java 9 之后,再也没有 “1.x” 的版本了
Java 8 (2014, LTS)
├─ Lambda 表达式
├─ Stream API
├─ 新日期时间 API (java.time)
└─ 接口默认方法 & 静态方法
Java 9 (2017)
├─ 模块化系统 (Jigsaw)
├─ JShell REPL
└─ 接口私有方法
Java 10 (2018)
├─ 局部变量类型推断 (var)
└─ 垃圾回收 & 性能优化
Java 11 (2018, LTS)
├─ 字符串新方法: isBlank(), lines(), strip()
├─ HTTP Client API
└─ 废弃 Java EE & CORBA
Java 12-16 (2019-2021)
├─ Switch 表达式 (12/13)
├─ Text Blocks 三引号字符串 (13)
├─ Records 轻量不可变类 (14)
└─ Pattern Matching for instanceof (16)
Java 17 (2021, LTS)
├─ Sealed Classes 密封类
├─ Pattern Matching for switch (预览)
├─ 强封装 JDK 内部 API
└─ 垃圾回收增强 (G1/ZGC)
Java 18-20 (2022-2024)
├─ UTF-8 默认编码 (18)
├─ Vector API (预览)
├─ Foreign Function & Memory API (预览)
└─ Scoped Values (线程局部优化, 20)
Java 21 (2023, LTS)
├─ 虚拟线程 (Project Loom)
├─ Record Patterns 完善
├─ String Templates (预览)
└─ 应用密封类 & 模式匹配加强总结重点:
- Java 8:Lambda + Stream + 新日期
- LTS 版本(11/17/21)重点掌握 API 新特性
- Records & Pattern Matching:简化数据类和类型检查
- 模块化 & 虚拟线程:企业级架构 & 高并发
- Text Blocks & String Templates:写字符串更爽
Java 8(2014)—里程碑级 LTS
- Lambda 表达式:函数式编程入门,写集合处理再也不用 for 循环炸天
- Stream API:集合流水线处理,filter/map/reduce 一条龙
- 新日期时间 API(java.time):替代 Date/Calendar,线程安全
- 默认方法 & 静态方法接口:接口升级不破坏旧实现
java
List<String> names = List.of("a","b","c");
names.stream().filter(n -> n.startsWith("a")).forEach(System.out::println);try-with-resources
Java 9(2017)
- 模块化系统(Jigsaw):模块化 JDK,减少内存、提高安全
- JShell(REPL):交互式试验 Java 代码
- 接口私有方法:接口内部可以有 private 方法
java
module com.example.app {
requires java.sql;
}Java 10(2018)
- 局部变量类型推断(var)
- 改进垃圾回收器 & 性能优化
java
var list = List.of(1,2,3); // 类型由编译器推断Java 11(2018)—LTS
- 字符串新方法:
isBlank(),lines(),strip()等
java
public class StringDemo {
public static void main(String[] args) {
String s1 = " ";
String s2 = "Hello\nWorld\nJava";
// isBlank() 判断空白字符串(空格、制表符等)
System.out.println(s1.isBlank()); // true
// strip() 去掉首尾空白,比 trim() 更智能,支持 Unicode 空格
String s3 = " Java ";
System.out.println("[" + s3.strip() + "]"); // [Java]
// lines() 将多行字符串拆成 Stream
s2.lines().forEach(System.out::println);
}
}输出:
true
[Java]
Hello
World
Java- 局部变量语法增强(var 可以用于 Lambda)
java
import java.util.List;
public class VarDemo {
public static void main(String[] args) {
List<String> list = List.of("a", "b", "c");
// 使用 var 定义 Lambda 参数
list.forEach((var item) -> System.out.println(item.toUpperCase()));
}
}注意,
var只能用于局部变量,Lambda 参数和try-with-resources也能用
- HTTP Client API(标准化)
java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientDemo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.github.com"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Body: " + response.body().substring(0, 100) + "...");
}
}这 API 替代了老掉牙的
HttpURLConnection,链式调用更舒服
Java 12-16(2019-2021)
- Switch 表达式(Java 12/13):返回值、箭头语法
- Text Blocks(三引号字符串,Java 13)
- Records(Java 14):轻量不可变数据类
- Pattern Matching for instanceof(Java 16):类型检查更简洁
java
record Person(String name, int age) {}
Person p = new Person("Tom", 20);
System.out.println(p.name());Java 17(2021)—LTS
- Sealed Classes:控制类继承范围
- Pattern Matching for switch(预览)
- 强封装 JDK 内部 API
- 增强垃圾回收(G1/ ZGC)
java
sealed interface Shape permits Circle, Rectangle {}
final class Circle implements Shape { }
final class Rectangle implements Shape { }Java 18-20(2022-2024)
- UTF-8 默认编码(Java 18)
- Vector API(预览)
- Foreign Function & Memory API(外部内存交互,预览)
- 记录模式匹配增强
- Scoped Values(线程局部优化,Java 20)
Java 21(2023)—LTS
- 虚拟线程(Project Loom):超轻量级线程,数百万并发不炸堆
- Record Patterns 完善
- String Templates(文本模板,预览)
- 应用密封类和模式匹配加强
java
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> System.out.println("Hello Virtual Thread"));
}Maven
Maven 如何配置代理