Skip to content

Java

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

API Documentation

  1. Lambda 表达式:函数式编程入门,写集合处理再也不用 for 循环炸天
  2. Stream API:集合流水线处理,filter/map/reduce 一条龙
  3. 新日期时间 API(java.time):替代 Date/Calendar,线程安全
  4. 默认方法 & 静态方法接口:接口升级不破坏旧实现
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)

  1. 模块化系统(Jigsaw):模块化 JDK,减少内存、提高安全
  2. JShell(REPL):交互式试验 Java 代码
  3. 接口私有方法:接口内部可以有 private 方法
java
module com.example.app {
    requires java.sql;
}

Java 10(2018)

  1. 局部变量类型推断(var)
  2. 改进垃圾回收器 & 性能优化
java
var list = List.of(1,2,3); // 类型由编译器推断

Java 11(2018)—LTS

  1. 字符串新方法: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
  1. 局部变量语法增强(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 也能用

  1. 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

  1. Sealed Classes:控制类继承范围
  2. Pattern Matching for switch(预览)
  3. 强封装 JDK 内部 API
  4. 增强垃圾回收(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

API Documentation

  1. 虚拟线程(Project Loom):超轻量级线程,数百万并发不炸堆
  2. Record Patterns 完善
  3. String Templates(文本模板,预览)
  4. 应用密封类和模式匹配加强
java
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    executor.submit(() -> System.out.println("Hello Virtual Thread"));
}

Maven

Maven in 5 Minutes

Maven 如何配置代理