本章将详细介绍如何搭建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开发环境的搭建:
- JDK安装:不同操作系统的安装方法和环境变量配置
- IDE选择:IntelliJ IDEA、Eclipse、VS Code的配置和使用
- 构建工具:Maven和Gradle的配置和常用命令
- 版本控制:Git的配置和基本工作流程
- 调试工具:IDE调试功能和性能分析工具
- 最佳实践:项目结构规范和代码规范配置
下一章预告
下一章我们将学习Java基本语法,包括: - 变量和数据类型 - 运算符和表达式 - 控制结构 - 数组和字符串 - 方法定义和调用
练习题
基础练习
环境搭建:
- 安装JDK 17并配置环境变量
- 选择一个IDE并完成基本配置
- 创建第一个Java项目并运行Hello World程序
构建工具:
- 使用Maven创建一个新项目
- 添加JUnit依赖并编写简单测试
- 使用Maven命令编译、测试和打包项目
进阶练习
项目配置:
- 配置Checkstyle代码规范检查
- 设置Git仓库并提交代码
- 配置IDE的代码格式化规则
调试实践:
- 使用IDE调试功能调试程序
- 设置断点和条件断点
- 分析程序的内存使用情况
提示:良好的开发环境配置是高效开发的基础,建议花时间熟悉各种工具的使用。