菜鸟科技网

用java编译命令

核心概念

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

用java编译命令-图1
(图片来源网络,侵删)
  1. javac:Java Compiler 的缩写,它的作用是将人类可读的 Java 源代码文件(.java 文件)编译成 Java 虚拟机(JVM)可以理解的字节码文件(.class 文件)。
  2. 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!");
    }
}

编译步骤:

用java编译命令-图2
(图片来源网络,侵删)
  1. 打开终端或命令提示符。
  2. 使用 cd 命令切换到 HelloWorld.java 文件所在的目录。
    cd C:\Users\YourUser\Documents\JavaProjects
  3. 执行 javac 命令:
    javac HelloWorld.java
  4. 如果编译成功,命令行不会有任何错误提示,并且你会在当前目录下看到一个新文件:HelloWorld.class,这就是 Java 字节码文件。

运行命令:java

基本语法

java [选项] 类名

运行上面的例子

  1. 确保你仍然在 HelloWorld.class 文件所在的目录下。
  2. 执行 java 命令:
    java HelloWorld
  3. 你会看到终端输出:
    Hello, World!

常见错误: 如果你不小心写成 java HelloWorld.class,会得到错误信息: Error: Could not find or load main class HelloWorld.class 因为 java 命令需要的是类名,而不是文件名。


常用编译选项

javac 提供了许多有用的选项,最常用的就是指定输出目录。

-d 选项:指定输出目录

默认情况下,.class 文件会生成在 .java 文件所在的同一目录,但通常我们希望将源代码和编译后的代码分开管理。

示例:

用java编译命令-图3
(图片来源网络,侵删)
  1. 创建项目目录结构:

    my-app/
    ├── src/
    │   └── com/
    │       └── example/
    │           └── Main.java
    └── bin/  (用于存放编译后的 .class 文件)
  2. 编译 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:这是源文件的完整路径。
  3. 运行程序: 由于 .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!");
    }
}

编译和运行:

  1. 进入 my-project 目录。

  2. 编译 src 目录下的所有 .java 文件,并输出到 bin 目录:

    javac -d bin src/*.java
    • src/*.java 是一个通配符,表示 src 目录下所有的 .java 文件。javac 会自动处理它们之间的依赖关系。
  3. 运行 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 文件。

对于大型项目,手动使用命令行编译会非常繁琐,通常会使用 构建工具MavenGradle 来自动化管理编译、依赖和打包等过程,但理解 javacjava 的基本用法是每个 Java 程序序员的必备基础。

分享:
扫描分享到社交APP
上一篇
下一篇