核心概念
在 Java 开发中,有两个最基本也是最重要的命令行工具:

javac:Java Compiler 的缩写,它的作用是将人类可读的 Java 源代码文件(.java文件)编译成 Java 虚拟机(JVM)可以理解的字节码文件(.class文件)。java:Java Application Launcher 的缩写,它的作用是启动 JVM,加载并运行指定的.class文件。
重要区别:
javac命令后面跟的是 源文件名(如MyProgram.java),因为它需要编译。java命令后面跟的是 类名(如MyProgram),因为它需要运行类中的main方法,注意,这里不带.class后缀。
编译命令:javac
基本语法
javac [选项] 源文件名.java
最简单的例子
假设你有一个名为 HelloWorld.java 的文件,内容如下:
HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
编译步骤:

- 打开终端或命令提示符。
- 使用
cd命令切换到HelloWorld.java文件所在的目录。cd C:\Users\YourUser\Documents\JavaProjects
- 执行
javac命令:javac HelloWorld.java
- 如果编译成功,命令行不会有任何错误提示,并且你会在当前目录下看到一个新文件:
HelloWorld.class,这就是 Java 字节码文件。
运行命令:java
基本语法
java [选项] 类名
运行上面的例子
- 确保你仍然在
HelloWorld.class文件所在的目录下。 - 执行
java命令:java HelloWorld
- 你会看到终端输出:
Hello, World!
常见错误:
如果你不小心写成 java HelloWorld.class,会得到错误信息:
Error: Could not find or load main class HelloWorld.class
因为 java 命令需要的是类名,而不是文件名。
常用编译选项
javac 提供了许多有用的选项,最常用的就是指定输出目录。
-d 选项:指定输出目录
默认情况下,.class 文件会生成在 .java 文件所在的同一目录,但通常我们希望将源代码和编译后的代码分开管理。
示例:

-
创建项目目录结构:
my-app/ ├── src/ │ └── com/ │ └── example/ │ └── Main.java └── bin/ (用于存放编译后的 .class 文件) -
编译
Main.java,并将输出结果放到bin目录下:# 先切换到 src 目录的上一级目录 cd my-app/ # 编译,-d . 表示将输出到当前目录,但我们希望是 bin 目录 # 所以我们使用 -d bin javac -d bin src/com/example/Main.java
-d bin:告诉javac将所有生成的.class文件放到bin目录中。src/com/example/Main.java:这是源文件的完整路径。
-
运行程序: 由于
.class文件现在在bin目录下,并且类Main包含在com.example包中,运行时需要指定完整的类名(包含包路径)。# 从 my-app 目录下运行 java -cp bin com.example.Main
-cp bin:-cp是-classpath的缩写,它告诉java命令去哪里寻找.class文件,这里就是bin目录。com.example.Main:这是类的全限定名,必须包含包路径。
处理多个文件和依赖
如果你的项目有多个 .java 文件,并且它们相互依赖,你可以一次性编译所有文件。
示例:
假设项目结构如下:
my-project/
├── src/
│ ├── Animal.java
│ └── Dog.java
└── bin/
Animal.java
public class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
Dog.java
// Dog 类依赖于 Animal 类
public class Dog extends Animal {
public void bark() {
System.out.println("Woof!");
}
}
编译和运行:
-
进入
my-project目录。 -
编译
src目录下的所有.java文件,并输出到bin目录:javac -d bin src/*.java
src/*.java是一个通配符,表示src目录下所有的.java文件。javac会自动处理它们之间的依赖关系。
-
运行
Dog类:java -cp bin Dog
(
Dog类在包中,则需要使用完整类名,如java -cp bin com.example.Dog)
| 命令 | 作用 | 示例 | 备注 |
|---|---|---|---|
javac |
编译 Java 源文件 | javac MyProgram.java |
将 .java 文件编译成 .class 文件。 |
java |
运行 Java 字节码 | java MyProgram |
运行指定类的 main 方法。不加 .class 后缀。 |
javac -d |
指定编译输出目录 | javac -d bin src/MyClass.java |
将生成的 .class 文件放到指定的 bin 目录。 |
java -cp |
指定类搜索路径 | java -cp bin com.example.MyClass |
告诉 java 命令去哪里寻找 .class 文件。 |
对于大型项目,手动使用命令行编译会非常繁琐,通常会使用 构建工具 如 Maven 或 Gradle 来自动化管理编译、依赖和打包等过程,但理解 javac 和 java 的基本用法是每个 Java 程序序员的必备基础。
