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!
这个例子需要注意的关键点是:
- 源文件名“HelloWorld.java”必须与源文件中的类名匹配…即
HelloWorld
。如果它们不匹配,你将收到编译错误。 - 字节码文件名“HelloWorld.class”对应于类名。如果你要重命名“HelloWorld.class”,那么当你尝试运行它时会出现错误。
- 使用
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!
此示例中需要注意的其他要点是:
- 目录结构必须与包名称结构匹配。
- 运行该类时,必须提供完整的类名; 即“com.example.HelloWorld”而不是
HelloWorld
。 - 你不必从当前目录编译和运行 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(例如 NetBeans , eclipse , IntelliJ IDEA ),它提供嵌入式编译器和项目的增量构建。
常用的’javac’选项
以下是 javac
命令的一些选项,可能对你有用
-d
选项设置用于编写“.class”文件的目标目录。-sourcepath
选项设置源代码搜索路径。-cp
或-classpath
选项设置用于查找外部和以前编译的类的搜索路径。有关类路径以及如何指定它的更多信息,请参阅类路径主题。-version
选项打印编译器的版本信息。
将在单独的示例中描述更完整的编译器选项列表。
参考
javac
命令的权威参考是 javac
的 Oracle 手册页 。