javac 命令 - 入门

简单的例子

假设“HelloWorld.java”包含以下 Java 源代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

(有关上述代码的说明,请参阅 Java 语言入门 。)

我们可以使用以下命令编译上面的文件:

$ javac HelloWorld.java 

这会生成一个名为“HelloWorld.class”的文件,然后我们可以按如下方式运行:

$ java HelloWorld
Hello world!

这个例子需要注意的关键点是:

  1. 源文件名“HelloWorld.java”必须与源文件中的类名匹配…即 HelloWorld。如果它们不匹配,你将收到编译错误。
  2. 字节码文件名“HelloWorld.class”对应于类名。如果你要重命名“HelloWorld.class”,那么当你尝试运行它时会出现错误。
  3. 使用 java 运行 Java 应用程序时,提供的类名不是字节码文件名。

包的示例

大多数实用的 Java 代码使用包来组织类的命名空间,并降低意外类名冲突的风险。

如果我们想在包调用 com.example 中声明 HelloWorld 类,“HelloWorld.java”将包含以下 Java 源:

package com.example;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

此源代码文件需要存储在目录树中,其结构对应于程序包命名。

.    # the current directory (for this example)
|
 ----com
     |
      ----example
          |
           ----HelloWorld.java

我们可以使用以下命令编译上面的文件:

$ javac com/example/HelloWorld.java 

这会生成一个名为“com / example / HelloWorld.class”的文件; 即编译后,文件结构应如下所示:

.    # the current directory (for this example)
|
 ----com
     |
      ----example
          |
           ----HelloWorld.java
           ----HelloWorld.class

然后我们可以按如下方式运行应用程序:

$ java com.example.HelloWorld
Hello world!

此示例中需要注意的其他要点是:

  1. 目录结构必须与包名称结构匹配。
  2. 运行该类时,必须提供完整的类名; 即“com.example.HelloWorld”而不是 HelloWorld
  3. 你不必从当前目录编译和运行 Java 代码。我们这里只是为了说明而做。

使用’javac’一次编译多个文件

如果你的应用程序包含多个源代码文件(大多数都是!),你可以一次编译一个。或者,你可以通过列出路径名来同时编译多个文件:

$ javac Foo.java Bar.java

或使用命令 shell 的文件名通配符功能….

$ javac *.java
$ javac com/example/*.java
$ javac */**/*.java #Only works on Zsh or with globstar enabled on your shell

这将编译当前目录中“com / example”目录中的所有 Java 源文件,并分别在子目录中递归编译。第三种方法是提供源文件名(和编译器选项)列表作为文件。例如:

$ javac @sourcefiles

sourcefiles 文件包含的位置:

Foo.java
Bar.java
com/example/HelloWorld.java

注意:编译这样的代码适用于小型单人项目和一次性程序。除此之外,建议选择和使用 Java 构建工具。或者,大多数程序员使用 Java IDE(例如 NetBeanseclipseIntelliJ IDEA ),它提供嵌入式编译器和项目的增量构建。

常用的’javac’选项

以下是 javac 命令的一些选项,可能对你有用

  • -d 选项设置用于编写“.class”文件的目标目录。
  • -sourcepath 选项设置源代码搜索路径。
  • -cp-classpath 选项设置用于查找外部和以前编译的类的搜索路径。有关类路径以及如何指定它的更多信息,请参阅类路径主题。
  • -version 选项打印编译器的版本信息。

将在单独的示例中描述更完整的编译器选项列表。

参考

javac 命令的权威参考是 javacOracle 手册页