JVM 不能直接运行你写的代码。它只知道如何执行用字节码编写的程序。字节码是一种接近机器码的低级语言。
对于 Java,编译是将用 Java 编写的(高级)程序翻译成用字节码编写的相同程序。
您的代码在 .java 文件中传递给编译器。如果编译器在代码中没有发现错误,那么你会得到一个新的字节码文件。该文件将具有相同的名称但扩展名不同:.class。如果代码中有错误,那么编译器会告诉你“程序没有编译”。然后您需要阅读每条错误消息并修复错误。
您使用 javac 命令调用编译器,它是 JDK(Java 开发工具包)的一部分。这意味着如果您只安装 JRE(Java 运行时环境),那么您将没有编译器!您将只有 JVM,它只能运行字节码。所以我们安装 JDK 并将我们的.java文件传递给编译器。
例如,让我们来看一个带有一些控制台输出的简单程序:
class MySolution {
public static void main(String[] args) {
System.out.println("Hi, command line!");
}
}
让我们将此代码保存到文件D:/temp/MySolution.java中。
让我们使用命令编译我们的代码
D:\temp>javac MySolution.java
如果代码中没有编译错误,临时文件夹中将出现一个MySolution.class文件。更重要的是,包含您的代码的MySolution.java文件不会去任何地方。它仍然在原处。但是现在MySolution.class包含字节码并且可以直接由 JVM 运行。
我们的示例尽可能简单,但即使是最大和最复杂的项目也使用javac命令。因此,了解它的工作原理对您非常有用。
一次可以编译多个类。例如,假设在temp文件夹中有另一个文件Cat.java:
D:\temp>javac MySolution.java Cat.java
或这个:
D:\temp>javac *.java
编译后的.class文件可以打包成jar文件,方便移动到不同的电脑上运行。以下是如何创建jar文件的示例:
D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class
在哪里:
-
jar是创建.jar文件的命令,包含在JDK中
-
cvfe是命令行选项,含义如下:
-
c – 创建一个新的jar文件
-
v – 显示详细信息
-
f – 表示我们希望将工具的输出放入文件 ( myjar.jar )
-
e – 表示入口点(MySolution ),即包含主要方法的类
-
-
MySolution.java Cat.class – 将打包到jar文件中的文件的空格分隔名称。
下面是我们如何运行生成的jar文件:
D:\temp>java -jar myjar.jar
如需更多详细信息: |
---|
javac和jar工具有内置的帮助。要显示它,请在命令行上运行以下命令:
|
GO TO FULL VERSION