基础编译和运行
这是最简单、最常用的场景。

第一步:编写 Java 源代码
创建一个名为 HelloWorld.java 的文件。
# 使用 vim 或 nano 等文本编辑器创建文件 vim HelloWorld.java
在文件中输入以下代码:
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
重要提示:
- 文件名必须与
public class的名称完全一致,包括大小写,这里是HelloWorld,所以文件名就是HelloWorld.java。 - 一个
.java文件中可以有多个class,但只能有一个public class。
第二步:编译源代码
使用 javac 命令来编译 .java 源文件,这会生成一个或多个 .class 字节码文件。

# javac [选项] 源文件名 javac HelloWorld.java
执行成功后,你会看到当前目录下多了一个 HelloWorld.class 文件,这就是 Java 虚拟机可以执行的字节码。
第三步:运行程序
使用 java 命令来运行编译好的 .class 文件。
关键点: java 命令后面不需要 .class 扩展名。
# java [选项] 类名 java HelloWorld
你应该会在终端看到输出:
Hello, World!
处理多文件项目
当一个项目包含多个 .java 文件时,通常需要一起编译。
假设你有以下文件结构:
my-project/
├── src/
│ ├── Main.java
│ └── utils/
│ └── Calculator.java
└── (其他目录...)
Calculator.java
package utils;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
Main.java
import utils.Calculator;
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
int result = calc.add(10, 20);
System.out.println("The result is: " + result);
}
}
编译方法
在 src 目录下编译
# 进入 src 目录 cd my-project/src # 编译所有 .java 文件 javac *.java
*.java 是一个通配符,表示匹配所有以 .java 结尾的文件。javac 会自动处理文件之间的依赖关系。
使用 -d 指定输出目录(推荐)
这是更规范的做法,可以将编译后的 .class 文件输出到指定的目录,保持源码和编译产物分离。
# 在 my-project 目录下执行 cd my-project # 创建一个目录用于存放编译后的文件 mkdir -p bin # 编译 src 目录下所有文件,并将 .class 文件输出到 bin 目录 # -d bin: 指定输出目录为 bin # src/**/*.java: 递归查找 src 目录及其子目录下所有 .java 文件 javac -d bin src/**/*.java
编译完成后,bin 目录的结构会与 src 目录保持一致:
my-project/
├── bin/
│ └── utils/
│ └── Calculator.class
│ └── Main.class
└── src/
...
运行多文件项目
运行时,需要告诉 java 命令去哪里寻找 .class 文件,这通过 -classpath (或其简写 -cp) 参数实现。
# 在 my-project 目录下执行 cd my-project # -cp bin: 指定类路径为 bin 目录 # Main: 指定要运行的类名 java -cp bin Main
输出:
The result is: 30
常用编译选项 (javac)
| 选项 | 描述 | 示例 |
|---|---|---|
-d <目录> |
指定 .class 文件的输出目录。 |
javac -d bin src/*.java |
-classpath <路径> |
指定编译时需要依赖的类路径(查找 .jar 或其他 .class 文件)。 |
javac -cp "lib/*:." src/Main.java |
-sourcepath <路径> |
指定源文件的搜索路径(当源文件之间有依赖时)。 | javac -sourcepath src src/Main.java |
-target <版本> |
生成指定版本的 JVM 字节码。-target 1.8。 |
javac -target 11 -source 11 src/*.java |
-source <版本> |
指定源代码兼容的 Java 版本。 | javac -source 17 src/*.java |
-Xlint |
启用所有推荐的编译器警告。 | javac -Xlint src/*.java |
-encoding <编码> |
指定源文件的字符编码。 | javac -encoding UTF-8 src/*.java |
常用运行选项 (java)
| 选项 | 描述 | 示例 |
|---|---|---|
-classpath <路径> 或 -cp <路径> |
指定运行时类路径,即 JVM 查找 .class 文件和 .jar 文件的位置。这是最常用的选项。 |
java -cp "bin:lib/*" com.example.Main |
-jar <jar文件> |
运行一个可执行的 JAR 文件。 | java -p my-app.jar |
-D<属性名>=<属性值> |
设置一个系统属性,可以在代码中通过 System.getProperty() 获取。 |
java -Dmyapp.config.path=/etc/myapp.conf -cp bin Main |
-verbose |
输出详细的信息,如类加载过程。 | java -verbose -cp bin Main |
-Xms 和 -Xmx |
设置 JVM 的初始堆内存大小和最大堆内存大小。 | java -Xms256m -Xmx1g -cp bin Main |
高级:构建工具 (Maven / Gradle)
对于复杂的项目,手动使用 javac 和 java 命令会变得非常繁琐,现代 Java 开发普遍使用构建工具来自动化管理编译、依赖、打包、测试等流程。
Maven
Maven 使用 pom.xml 文件来定义项目配置。
-
创建 Maven 项目:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
-
编译项目: 进入项目目录 (
my-app),然后执行:cd my-app mvn compile
-
运行项目:
mvn exec:java -Dexec.mainClass="com.example.App"
Gradle
Gradle 使用 build.gradle 或 build.gradle.kts 文件来定义项目配置。
-
创建 Gradle 项目:
gradle init --type java-application --package com.example --project-name my-app
-
编译项目: 进入项目目录 (
my-app),然后执行:cd my-app gradle build
build任务会自动包含编译、测试和打包等步骤。 -
运行项目:
gradle run
| 场景 | 命令 |
|---|---|
| 简单单文件 | javac MyClass.java java MyClass |
| 多文件项目 | javac -d bin src/**/*.java java -cp bin com.example.Main |
| 生产级项目 | 使用 Maven (mvn compile) 或 Gradle (gradle build) |
对于初学者,务必掌握 javac 和 java 的基本用法,在实际工作中,则应尽快学习并使用 Maven 或 Gradle 来提高开发效率。
