本章将详细介绍如何搭建Java开发环境,包括JDK安装、IDE配置、构建工具使用等,为后续的Java开发做好准备。

2.1 JDK安装与配置

2.1.1 JDK版本选择

LTS(长期支持)版本推荐

版本 发布时间 支持截止 推荐场景
Java 8 2014年3月 2030年12月 企业级应用,稳定性要求高
Java 11 2018年9月 2026年9月 现代企业应用,平衡新特性和稳定性
Java 17 2021年9月 2029年9月 新项目推荐,最新LTS版本
Java 21 2023年9月 2031年9月 最新特性,适合新项目

JDK发行版选择

# 主要JDK发行版
Oracle JDK          # 官方版本,商业使用需要许可证
OpenJDK             # 开源版本,免费使用
Adoptium (Eclipse)  # 高质量的OpenJDK构建
Amazon Corretto     # AWS提供的免费JDK
Azul Zulu           # Azul提供的OpenJDK构建
GraalVM             # 支持多语言的高性能运行时

2.1.2 Windows环境安装

方法1:官方安装包

# 1. 下载JDK
# 访问 https://adoptium.net/ 下载适合的版本

# 2. 安装后验证
java -version
javac -version

# 3. 配置环境变量(如果安装程序未自动配置)
# JAVA_HOME: C:\Program Files\Eclipse Adoptium\jdk-17.0.8.101-hotspot
# PATH: %JAVA_HOME%\bin

方法2:使用包管理器

# 使用Chocolatey
choco install openjdk17

# 使用Scoop
scoop bucket add java
scoop install openjdk17

# 使用winget
winget install EclipseAdoptium.Temurin.17.JDK

环境变量配置脚本

@echo off
REM 设置JAVA_HOME环境变量
set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-17.0.8.101-hotspot

REM 添加到PATH
set PATH=%JAVA_HOME%\bin;%PATH%

REM 验证安装
echo 验证Java安装...
java -version
echo.
echo 验证编译器...
javac -version

echo.
echo Java环境配置完成!
pause

2.1.3 Linux环境安装

Ubuntu/Debian系统

# 更新包列表
sudo apt update

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

# 验证安装
java -version
javac -version

# 查看已安装的Java版本
sudo update-alternatives --list java

# 切换Java版本(如果有多个版本)
sudo update-alternatives --config java

CentOS/RHEL系统

# 安装OpenJDK 17
sudo yum install java-17-openjdk-devel

# 或者使用dnf(较新版本)
sudo dnf install java-17-openjdk-devel

# 设置JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

手动安装脚本

#!/bin/bash
# install_java.sh - Java安装脚本

JAVA_VERSION="17.0.8"
JAVA_BUILD="101"
DOWNLOAD_URL="https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${JAVA_VERSION}%2B${JAVA_BUILD}/OpenJDK17U-jdk_x64_linux_hotspot_${JAVA_VERSION}_${JAVA_BUILD}.tar.gz"
INSTALL_DIR="/opt/java"

echo "开始安装Java ${JAVA_VERSION}..."

# 创建安装目录
sudo mkdir -p $INSTALL_DIR
cd /tmp

# 下载JDK
echo "下载JDK..."
wget $DOWNLOAD_URL -O openjdk.tar.gz

# 解压
echo "解压JDK..."
sudo tar -xzf openjdk.tar.gz -C $INSTALL_DIR

# 创建符号链接
sudo ln -sf $INSTALL_DIR/jdk-${JAVA_VERSION}+${JAVA_BUILD} $INSTALL_DIR/current

# 配置环境变量
echo "配置环境变量..."
echo "export JAVA_HOME=$INSTALL_DIR/current" | sudo tee /etc/profile.d/java.sh
echo "export PATH=\$JAVA_HOME/bin:\$PATH" | sudo tee -a /etc/profile.d/java.sh
sudo chmod +x /etc/profile.d/java.sh

# 重新加载环境变量
source /etc/profile.d/java.sh

# 验证安装
echo "验证安装..."
java -version
javac -version

echo "Java安装完成!"

2.1.4 macOS环境安装

# 使用Homebrew
brew install openjdk@17

# 创建符号链接
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk

# 配置环境变量
echo 'export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home' >> ~/.zshrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

# 验证安装
java -version

2.2 集成开发环境(IDE)

2.2.1 IntelliJ IDEA

安装和基本配置

// 创建第一个项目示例
public class IDEAExample {
    public static void main(String[] args) {
        System.out.println("Hello IntelliJ IDEA!");
        
        // IDEA的智能提示和代码补全
        String message = "Welcome to Java Development";
        System.out.println(message.toUpperCase());
        
        // 使用IDEA的代码模板
        for (int i = 0; i < 5; i++) {
            System.out.println("Count: " + i);
        }
    }
}

常用快捷键

=== IntelliJ IDEA 常用快捷键 ===

代码编辑:
Ctrl + Space        # 代码补全
Ctrl + Shift + Space # 智能代码补全
Ctrl + /            # 行注释
Ctrl + Shift + /    # 块注释
Ctrl + D            # 复制当前行
Ctrl + Y            # 删除当前行
Ctrl + Shift + Up/Down # 移动代码块

导航:
Ctrl + N            # 查找类
Ctrl + Shift + N    # 查找文件
Ctrl + Alt + Shift + N # 查找符号
Ctrl + B            # 跳转到声明
Ctrl + Alt + B      # 跳转到实现
Alt + F7            # 查找使用

重构:
Shift + F6          # 重命名
Ctrl + Alt + M      # 提取方法
Ctrl + Alt + V      # 提取变量
Ctrl + Alt + C      # 提取常量
F6                  # 移动类/方法

调试:
F8                  # 单步执行
F7                  # 进入方法
Shift + F8          # 跳出方法
F9                  # 继续执行
Ctrl + F8           # 切换断点

IDEA插件推荐

// 插件配置示例
public class IDEAPlugins {
    public static void main(String[] args) {
        System.out.println("=== 推荐的IDEA插件 ===");
        
        String[] essentialPlugins = {
            "Lombok",              // 减少样板代码
            "Maven Helper",        // Maven依赖管理
            "GitToolBox",          // Git增强工具
            "Rainbow Brackets",    // 彩虹括号
            "String Manipulation", // 字符串处理
            "Key Promoter X",      // 快捷键提示
            "CodeGlance",          // 代码缩略图
            "Alibaba Java Coding Guidelines" // 阿里巴巴代码规范
        };
        
        for (String plugin : essentialPlugins) {
            System.out.println("- " + plugin);
        }
    }
}

2.2.2 Eclipse IDE

安装和配置

// Eclipse项目示例
public class EclipseExample {
    /**
     * Eclipse的JavaDoc注释模板
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        System.out.println("Hello Eclipse IDE!");
        
        // Eclipse的代码格式化:Ctrl + Shift + F
        String[] languages = {"Java", "Python", "JavaScript", "C++"};
        
        for (String language : languages) {
            System.out.println("Learning: " + language);
        }
    }
    
    /**
     * Eclipse的方法模板示例
     * @param name 姓名
     * @return 问候语
     */
    public String greet(String name) {
        return "Hello, " + name + "!";
    }
}

Eclipse常用快捷键

=== Eclipse 常用快捷键 ===

代码编辑:
Ctrl + Space        # 内容辅助
Ctrl + 1            # 快速修复
Ctrl + /            # 行注释
Ctrl + Shift + /    # 块注释
Ctrl + D            # 删除当前行
Alt + Up/Down       # 移动代码行
Ctrl + Shift + F    # 格式化代码

导航:
Ctrl + Shift + R    # 打开资源
Ctrl + Shift + T    # 打开类型
F3                  # 跳转到声明
Ctrl + Alt + H      # 调用层次结构
Ctrl + O            # 快速大纲

重构:
Alt + Shift + R     # 重命名
Alt + Shift + M     # 提取方法
Alt + Shift + L     # 提取局部变量
Alt + Shift + C     # 修改方法签名

调试:
F5                  # 进入
F6                  # 单步执行
F7                  # 返回
F8                  # 继续
Ctrl + Shift + B    # 切换断点

2.2.3 Visual Studio Code

Java扩展包配置

// settings.json - VS Code Java配置
{
    "java.home": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.8.101-hotspot",
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-17",
            "path": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.8.101-hotspot"
        }
    ],
    "java.compile.nullAnalysis.mode": "automatic",
    "java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",
    "java.saveActions.organizeImports": true,
    "java.sources.organizeImports.starThreshold": 99,
    "java.sources.organizeImports.staticStarThreshold": 99
}

VS Code Java项目示例

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

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

/**
 * VS Code Java开发示例
 */
public class VSCodeExample {
    public static void main(String[] args) {
        System.out.println("Hello VS Code!");
        
        // 使用VS Code的智能提示
        List<String> fruits = new ArrayList<>();
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");
        
        // Stream API with VS Code autocomplete
        List<String> upperCaseFruits = fruits.stream()
            .map(String::toUpperCase)
            .collect(Collectors.toList());
        
        System.out.println("水果列表: " + upperCaseFruits);
    }
}

launch.json配置

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch VSCodeExample",
            "request": "launch",
            "mainClass": "com.example.VSCodeExample",
            "projectName": "java-tutorial",
            "args": [],
            "vmArgs": "-Xmx512m",
            "env": {
                "ENV": "development"
            }
        },
        {
            "type": "java",
            "name": "Debug Current File",
            "request": "launch",
            "mainClass": "${file}"
        }
    ]
}

2.3 构建工具

2.3.1 Maven

安装Maven

# Windows (使用Chocolatey)
choco install maven

# Linux (Ubuntu/Debian)
sudo apt install maven

# macOS (使用Homebrew)
brew install maven

# 验证安装
mvn -version

Maven项目结构

my-java-project/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── App.java
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           └── AppTest.java
│       └── resources/
└── target/

pom.xml配置示例

<?xml version="1.0" encoding="UTF-8"?>
<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>java-tutorial</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    
    <name>Java Tutorial Project</name>
    <description>Java学习项目示例</description>
    
    <!-- 属性配置 -->
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>5.9.2</junit.version>
        <slf4j.version>2.0.7</slf4j.version>
    </properties>
    
    <!-- 依赖管理 -->
    <dependencies>
        <!-- JUnit 5 测试框架 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        
        <!-- 日志框架 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.7</version>
        </dependency>
        
        <!-- JSON处理 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>
        
        <!-- Apache Commons工具库 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
    </dependencies>
    
    <!-- 构建配置 -->
    <build>
        <plugins>
            <!-- 编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            
            <!-- 测试插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            
            <!-- 打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            
            <!-- 生成可执行JAR -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.4.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.App</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Maven项目示例代码

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;

import java.util.HashMap;
import java.util.Map;

/**
 * Maven项目主类示例
 */
public class App {
    private static final Logger logger = LoggerFactory.getLogger(App.class);
    
    public static void main(String[] args) {
        logger.info("应用程序启动");
        
        App app = new App();
        app.demonstrateLibraries();
        
        logger.info("应用程序结束");
    }
    
    /**
     * 演示第三方库的使用
     */
    private void demonstrateLibraries() {
        // 使用Apache Commons Lang
        String text = "  Hello Maven!  ";
        String trimmed = StringUtils.trim(text);
        String capitalized = StringUtils.capitalize(trimmed.toLowerCase());
        
        logger.info("原始文本: '{}'", text);
        logger.info("处理后文本: '{}'", capitalized);
        
        // 使用Jackson处理JSON
        try {
            ObjectMapper mapper = new ObjectMapper();
            Map<String, Object> data = new HashMap<>();
            data.put("name", "Java Tutorial");
            data.put("version", "1.0.0");
            data.put("dependencies", new String[]{"junit", "slf4j", "jackson"});
            
            String json = mapper.writeValueAsString(data);
            logger.info("生成的JSON: {}", json);
            
            JsonNode node = mapper.readTree(json);
            logger.info("项目名称: {}", node.get("name").asText());
            
        } catch (Exception e) {
            logger.error("JSON处理错误", e);
        }
    }
}
// src/test/java/com/example/AppTest.java
package com.example;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import static org.junit.jupiter.api.Assertions.*;

/**
 * App类的单元测试
 */
class AppTest {
    
    private App app;
    
    @BeforeEach
    void setUp() {
        app = new App();
    }
    
    @AfterEach
    void tearDown() {
        app = null;
    }
    
    @Test
    @DisplayName("测试应用程序创建")
    void testAppCreation() {
        assertNotNull(app, "App实例不应为null");
    }
    
    @Test
    @DisplayName("测试字符串处理")
    void testStringProcessing() {
        String input = "  hello world  ";
        String expected = "Hello world";
        
        // 这里可以测试App类中的字符串处理方法
        // 假设有一个processString方法
        // String result = app.processString(input);
        // assertEquals(expected, result);
        
        // 临时测试
        assertTrue(input.trim().length() > 0);
    }
    
    @Test
    @DisplayName("测试JSON处理")
    void testJsonProcessing() {
        // 测试JSON相关功能
        String jsonString = "{\"name\":\"test\",\"value\":123}";
        assertNotNull(jsonString);
        assertTrue(jsonString.contains("name"));
    }
}

Maven常用命令

# 创建新项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

# 编译项目
mvn compile

# 运行测试
mvn test

# 打包项目
mvn package

# 清理项目
mvn clean

# 安装到本地仓库
mvn install

# 完整构建流程
mvn clean compile test package

# 运行应用程序
mvn exec:java -Dexec.mainClass="com.example.App"

# 查看依赖树
mvn dependency:tree

# 查看有效POM
mvn help:effective-pom

# 生成项目站点
mvn site

2.3.2 Gradle

安装Gradle

# Windows (使用Chocolatey)
choco install gradle

# Linux/macOS (使用SDKMAN)
curl -s "https://get.sdkman.io" | bash
sdk install gradle

# 验证安装
gradle -version

build.gradle配置

// build.gradle
plugins {
    id 'java'
    id 'application'
    id 'jacoco'
}

// 项目信息
group = 'com.example'
version = '1.0.0'
java.sourceCompatibility = JavaVersion.VERSION_17

// 应用程序主类
application {
    mainClass = 'com.example.App'
}

// 仓库配置
repositories {
    mavenCentral()
}

// 依赖配置
dependencies {
    // 编译时依赖
    implementation 'org.slf4j:slf4j-api:2.0.7'
    implementation 'ch.qos.logback:logback-classic:1.4.7'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    
    // 测试依赖
    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

// 测试配置
test {
    useJUnitPlatform()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

// JaCoCo代码覆盖率
jacocoTestReport {
    reports {
        xml.required = false
        csv.required = false
        html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
    }
}

// 自定义任务
task hello {
    doLast {
        println 'Hello Gradle!'
    }
}

// 创建可执行JAR
jar {
    manifest {
        attributes(
            'Main-Class': 'com.example.App'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

Gradle常用命令

# 初始化新项目
gradle init --type java-application

# 构建项目
gradle build

# 运行应用程序
gradle run

# 运行测试
gradle test

# 清理项目
gradle clean

# 查看任务列表
gradle tasks

# 查看依赖
gradle dependencies

# 生成代码覆盖率报告
gradle jacocoTestReport

# 运行自定义任务
gradle hello

# 构建并运行
gradle clean build run

2.4 版本控制工具

2.4.1 Git配置

基本配置

# 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 配置编辑器
git config --global core.editor "code --wait"

# 配置换行符处理
git config --global core.autocrlf true  # Windows
git config --global core.autocrlf input # Linux/macOS

# 查看配置
git config --list

.gitignore文件

# Java项目.gitignore模板

# 编译输出
*.class
*.jar
*.war
*.ear
*.nar
hs_err_pid*

# Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar

# Gradle
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

# IDE
.idea/
*.iws
*.iml
*.ipr
.vscode/
*.swp
*.swo
*~

# Eclipse
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

# NetBeans
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

# 操作系统
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# 日志文件
*.log
logs/

# 临时文件
*.tmp
*.temp

# 数据库
*.db
*.sqlite

# 配置文件(包含敏感信息)
config/local.properties
application-local.yml
.env

2.4.2 Git工作流程

# 初始化仓库
git init

# 添加远程仓库
git remote add origin https://github.com/username/java-tutorial.git

# 基本工作流程
git add .                    # 添加文件到暂存区
git commit -m "Initial commit"  # 提交到本地仓库
git push origin main         # 推送到远程仓库

# 分支操作
git branch feature/new-feature  # 创建新分支
git checkout feature/new-feature # 切换分支
git checkout -b feature/another  # 创建并切换分支

# 合并分支
git checkout main
git merge feature/new-feature

# 查看状态和历史
git status                   # 查看工作区状态
git log --oneline           # 查看提交历史
git diff                    # 查看差异

2.5 调试和性能分析工具

2.5.1 调试工具

IDE调试功能

// 调试示例代码
public class DebugExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int sum = 0;
        
        // 在这里设置断点
        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
            System.out.println("当前索引: " + i + ", 当前值: " + numbers[i] + ", 累计和: " + sum);
        }
        
        // 设置条件断点:sum > 10
        if (sum > 10) {
            System.out.println("总和大于10: " + sum);
        }
        
        // 测试异常调试
        try {
            int result = divide(10, 0);
            System.out.println("结果: " + result);
        } catch (ArithmeticException e) {
            System.err.println("除零错误: " + e.getMessage());
        }
    }
    
    private static int divide(int a, int b) {
        // 在这里设置断点观察参数值
        return a / b;
    }
}

远程调试配置

# 启动应用程序进行远程调试
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -cp target/classes com.example.App

# IDE中配置远程调试
# Host: localhost
# Port: 5005

2.5.2 性能分析工具

JVM监控工具

// 性能测试示例
import java.util.*;
import java.util.concurrent.*;

public class PerformanceExample {
    public static void main(String[] args) {
        // 内存使用监控
        Runtime runtime = Runtime.getRuntime();
        long startMemory = runtime.totalMemory() - runtime.freeMemory();
        
        // 时间测量
        long startTime = System.nanoTime();
        
        // 执行一些操作
        performOperations();
        
        long endTime = System.nanoTime();
        long endMemory = runtime.totalMemory() - runtime.freeMemory();
        
        System.out.println("执行时间: " + (endTime - startTime) / 1_000_000 + " ms");
        System.out.println("内存使用: " + (endMemory - startMemory) / 1024 + " KB");
    }
    
    private static void performOperations() {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            list.add("Item " + i);
        }
        
        // 模拟一些计算
        list.parallelStream()
            .filter(s -> s.contains("1"))
            .map(String::toUpperCase)
            .collect(Collectors.toList());
    }
}

JProfiler配置示例

// JProfiler性能分析示例
public class ProfilerExample {
    private static final int ITERATIONS = 1000000;
    
    public static void main(String[] args) {
        System.out.println("开始性能分析...");
        
        // CPU密集型操作
        testCPUIntensive();
        
        // 内存密集型操作
        testMemoryIntensive();
        
        System.out.println("性能分析完成");
    }
    
    private static void testCPUIntensive() {
        long start = System.currentTimeMillis();
        
        for (int i = 0; i < ITERATIONS; i++) {
            Math.sqrt(i);
        }
        
        long end = System.currentTimeMillis();
        System.out.println("CPU密集型操作耗时: " + (end - start) + " ms");
    }
    
    private static void testMemoryIntensive() {
        long start = System.currentTimeMillis();
        
        List<Object> objects = new ArrayList<>();
        for (int i = 0; i < ITERATIONS / 10; i++) {
            objects.add(new Object());
        }
        
        long end = System.currentTimeMillis();
        System.out.println("内存密集型操作耗时: " + (end - start) + " ms");
        System.out.println("创建对象数量: " + objects.size());
    }
}

2.6 开发环境最佳实践

2.6.1 项目结构规范

java-project/
├── README.md                 # 项目说明
├── .gitignore               # Git忽略文件
├── pom.xml                  # Maven配置
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── config/      # 配置类
│   │   │           ├── controller/  # 控制器
│   │   │           ├── service/     # 服务层
│   │   │           ├── repository/  # 数据访问层
│   │   │           ├── model/       # 数据模型
│   │   │           ├── util/        # 工具类
│   │   │           └── App.java     # 主类
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── logback.xml
│   │       └── static/
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           ├── service/
│       │           ├── repository/
│       │           └── integration/
│       └── resources/
├── docs/                    # 文档
├── scripts/                 # 脚本文件
└── target/                  # 构建输出

2.6.2 代码规范配置

Checkstyle配置

<!-- checkstyle.xml -->
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
    "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
    "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">
    <property name="charset" value="UTF-8"/>
    <property name="severity" value="warning"/>
    <property name="fileExtensions" value="java, properties, xml"/>
    
    <!-- 文件长度检查 -->
    <module name="FileLength">
        <property name="max" value="2000"/>
    </module>
    
    <!-- 行长度检查 -->
    <module name="LineLength">
        <property name="max" value="120"/>
        <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
    </module>
    
    <module name="TreeWalker">
        <!-- 命名约定 -->
        <module name="ConstantName"/>
        <module name="LocalFinalVariableName"/>
        <module name="LocalVariableName"/>
        <module name="MemberName"/>
        <module name="MethodName"/>
        <module name="PackageName"/>
        <module name="ParameterName"/>
        <module name="StaticVariableName"/>
        <module name="TypeName"/>
        
        <!-- 导入检查 -->
        <module name="AvoidStarImport"/>
        <module name="IllegalImport"/>
        <module name="RedundantImport"/>
        <module name="UnusedImports"/>
        
        <!-- 方法长度 -->
        <module name="MethodLength">
            <property name="max" value="150"/>
        </module>
        
        <!-- 参数数量 -->
        <module name="ParameterNumber">
            <property name="max" value="7"/>
        </module>
        
        <!-- 空白检查 -->
        <module name="EmptyForIteratorPad"/>
        <module name="GenericWhitespace"/>
        <module name="MethodParamPad"/>
        <module name="NoWhitespaceAfter"/>
        <module name="NoWhitespaceBefore"/>
        <module name="OperatorWrap"/>
        <module name="ParenPad"/>
        <module name="TypecastParenPad"/>
        <module name="WhitespaceAfter"/>
        <module name="WhitespaceAround"/>
    </module>
</module>

2.6.3 环境配置脚本

开发环境初始化脚本

#!/bin/bash
# setup-dev-env.sh - 开发环境初始化脚本

echo "=== Java开发环境初始化 ==="

# 检查Java版本
echo "检查Java版本..."
if command -v java &> /dev/null; then
    java -version
else
    echo "错误: 未找到Java,请先安装JDK"
    exit 1
fi

# 检查Maven
echo "检查Maven..."
if command -v mvn &> /dev/null; then
    mvn -version
else
    echo "警告: 未找到Maven,建议安装"
fi

# 检查Git
echo "检查Git..."
if command -v git &> /dev/null; then
    git --version
else
    echo "警告: 未找到Git,建议安装"
fi

# 创建项目目录结构
echo "创建项目目录结构..."
mkdir -p src/main/java/com/example
mkdir -p src/main/resources
mkdir -p src/test/java/com/example
mkdir -p src/test/resources
mkdir -p docs
mkdir -p scripts

# 创建基本文件
echo "创建基本配置文件..."

# 创建.gitignore
cat > .gitignore << 'EOF'
*.class
*.jar
*.war
*.ear
target/
.idea/
*.iml
.vscode/
.DS_Store
EOF

# 创建README.md
cat > README.md << 'EOF'
# Java项目

## 项目描述
这是一个Java项目模板。

## 环境要求
- Java 17+
- Maven 3.6+

## 构建和运行
```bash
mvn clean compile
mvn test
mvn package

EOF

echo “开发环境初始化完成!” “`

本章小结

本章我们学习了Java开发环境的搭建:

  1. JDK安装:不同操作系统的安装方法和环境变量配置
  2. IDE选择:IntelliJ IDEA、Eclipse、VS Code的配置和使用
  3. 构建工具:Maven和Gradle的配置和常用命令
  4. 版本控制:Git的配置和基本工作流程
  5. 调试工具:IDE调试功能和性能分析工具
  6. 最佳实践:项目结构规范和代码规范配置

下一章预告

下一章我们将学习Java基本语法,包括: - 变量和数据类型 - 运算符和表达式 - 控制结构 - 数组和字符串 - 方法定义和调用

练习题

基础练习

  1. 环境搭建

    • 安装JDK 17并配置环境变量
    • 选择一个IDE并完成基本配置
    • 创建第一个Java项目并运行Hello World程序
  2. 构建工具

    • 使用Maven创建一个新项目
    • 添加JUnit依赖并编写简单测试
    • 使用Maven命令编译、测试和打包项目

进阶练习

  1. 项目配置

    • 配置Checkstyle代码规范检查
    • 设置Git仓库并提交代码
    • 配置IDE的代码格式化规则
  2. 调试实践

    • 使用IDE调试功能调试程序
    • 设置断点和条件断点
    • 分析程序的内存使用情况

提示:良好的开发环境配置是高效开发的基础,建议花时间熟悉各种工具的使用。