01-Java环境搭建

JDK安装

JDK版本选择

LTS(长期支持)版本:

  • Java 8(LTS):2014年发布,企业广泛使用

  • Java 11(LTS):2018年发布,模块化系统

  • Java 17(LTS):2021年发布,密封类、记录类

学习环境:Java 17,生产环境:Java 11或Java 17。

Java 17核心特性

密封类(Sealed Classes):

// 限制继承范围
public sealed class Shape permits Circle, Rectangle {}

public final class Circle extends Shape {}
public non-sealed class Rectangle extends Shape {}

记录类(Records):

// 不可变数据类
public record Point(int x, int y) {}

安装JDK

Linux(Ubuntu/Debian):

# 安装OpenJDK 17
sudo apt update
sudo apt install openjdk-17-jdk

# 验证安装
java -version
javac -version

macOS:

# 使用Homebrew
brew install openjdk@17

# 配置环境变量
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Windows:

  1. 下载Oracle JDK或OpenJDK

  2. 安装并配置JAVA_HOME环境变量

  3. 添加%JAVA_HOME%\bin到PATH

环境变量配置

# Linux/macOS (~/.bashrc 或 ~/.zshrc)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

# 验证
echo $JAVA_HOME
java -version

开发工具

IntelliJ IDEA

JetBrains出品,社区版免费。

特性:

  • 智能代码补全

  • 重构功能

  • 内置调试器和性能分析

  • 集成Maven/Gradle

  • Git版本控制

快捷键(macOS/Windows):

  • Cmd/Ctrl + N:快速查找类

  • Cmd/Ctrl + Shift + N:快速查找文件

  • Cmd/Ctrl + Alt + L:格式化代码

  • Cmd/Ctrl + /:注释/取消注释

  • Shift + F10/F9:运行/调试

Eclipse

开源Java IDE,功能完整。

特性:

  • 免费开源

  • 插件生态丰富

  • 资源占用较小

VS Code

轻量级编辑器,通过插件支持Java。

必装插件:

  • Extension Pack for Java

  • Debugger for Java

  • Maven for Java

构建工具

Maven

基于XML的项目管理工具,依赖管理自动化。

pom.xml示例:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <dependencies>
        <!-- JUnit 5 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

常用命令:

mvn clean           # 清理
mvn compile         # 编译
mvn test            # 测试
mvn package         # 打包
mvn install         # 安装到本地仓库
mvn clean package   # 组合命令

Gradle

基于Groovy/Kotlin的现代构建工具,配置更简洁。

build.gradle示例:

plugins {
    id 'java'
}

group = 'com.example'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

常用命令:

gradle clean        # 清理
gradle build        # 构建
gradle test         # 测试
gradle run          # 运行
./gradlew build     # 使用wrapper

Hello World

基本程序结构

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译和运行

# 编译
javac HelloWorld.java

# 运行
java HelloWorld

# 输出
Hello, World!

带包的程序

// src/main/java/com/example/App.java
package com.example;

public class App {
    public static void main(String[] args) {
        System.out.println("Hello from package!");
    }
}
# 编译(在项目根目录)
javac -d out src/main/java/com/example/App.java

# 运行
java -cp out com.example.App

调试工具

jdb(命令行调试器)

# 编译时加调试信息
javac -g HelloWorld.java

# 启动调试
jdb HelloWorld

# 常用命令
stop in HelloWorld.main  # 设置断点
run                      # 运行
print variable           # 打印变量
step                     # 单步执行
next                     # 下一行
cont                     # 继续执行
quit                     # 退出

IntelliJ IDEA调试

  • F8:单步跳过

  • F7:单步进入

  • Shift + F8:单步跳出

  • F9:继续执行

  • Cmd/Ctrl + F8:切换断点

  • Alt + F9:运行到光标

常用工具

jshell(Java 9+)

交互式Java REPL,快速验证代码。

# 启动
jshell

# 使用
jshell> int x = 10;
jshell> System.out.println(x * 2);
20
jshell> /exit

jconsole/jvisualvm

JVM监控和性能分析工具。

# 启动jconsole
jconsole

# 启动jvisualvm
jvisualvm

监控内容:

  • 堆内存使用

  • 线程状态

  • CPU占用

  • GC活动

编码规范

命名约定

// 类名:大驼峰
public class StudentInfo {}

// 方法/变量:小驼峰
public void calculateSum() {}
private int studentAge;

// 常量:全大写+下划线
public static final int MAX_SIZE = 100;

// 包名:全小写
package com.example.myapp;

// 接口:大驼峰(可选I前缀)
public interface Runnable {}
public interface IService {}

代码风格

// 缩进:4空格
if (condition) {
    statement;
}

// 大括号:K&R风格
public void method() {
    // ...
}

// 一行一条语句
int a = 1;
int b = 2;

项目结构

Maven标准结构

my-app/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/           # Java源代码
│   │   │   └── com/example/
│   │   └── resources/      # 资源文件
│   └── test/
│       ├── java/           # 测试代码
│       └── resources/      # 测试资源
└── target/                 # 编译输出

Gradle标准结构

my-app/
├── build.gradle
├── settings.gradle
├── src/
│   ├── main/
│   │   ├── java/
│   │   └── resources/
│   └── test/
│       ├── java/
│       └── resources/
└── build/                  # 编译输出

Java 17完整特性列表

语言特性

1. 密封类(Sealed Classes - JEP 409)

  • 限制类的继承层次

  • 编译期完整性检查

  • switch穷尽性分析

2. 记录类(Records - JEP 395)

  • 不可变数据载体

  • 自动生成样板代码

  • 模式匹配支持

3. 模式匹配(Pattern Matching - JEP 406)

  • instanceof自动转型

  • switch表达式扩展

  • 减少类型转换代码

4. 文本块(Text Blocks - JEP 378)

  • 多行字符串字面量

  • 保留格式和缩进

  • 简化JSON/SQL/HTML编写

API增强

Stream增强:

// toList()快捷方法
List<String> list = stream.toList();

// mapMulti替代flatMap(性能更好)
stream.mapMulti((item, consumer) -> {
    consumer.accept(item);
    consumer.accept(item * 2);
});

RandomGenerator统一API:

import java.util.random.*;

RandomGenerator rng = RandomGenerator.of("L128X256MixRandom");
int value = rng.nextInt(100);

Foreign Function & Memory API(孵化):

  • 替代JNI调用本地代码

  • 直接内存访问

  • 更安全的本地互操作

JVM改进

ZGC和Shenandoah GC正式版:

  • 低延迟垃圾收集器

  • 适合大堆内存场景

强封装JDK内部:

# 访问内部API需要显式声明
java --add-opens java.base/java.lang=ALL-UNNAMED App

性能优化:

  • 向量API(孵化):SIMD支持

  • 增强伪随机数生成器

  • macOS ARM64支持

从Java 11到17的演进

版本

关键特性

Java 12

switch表达式(Preview)

Java 13

文本块(Preview)

Java 14

instanceof模式(Preview)、Records(Preview)、NPE增强

Java 15

密封类(Preview)、文本块(正式)

Java 16

instanceof模式(正式)、Records(正式)、Stream.toList()

Java 17

密封类(正式)、模式匹配增强、LTS版本

升级建议:

  • 从Java 8升级:需要处理模块化、弃用API

  • 从Java 11升级:主要是新特性,兼容性好

  • 新项目直接用Java 17