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工具有内置的帮助要显示它,请在命令行上运行以下命令:
  • javac--帮助
  • 罐子——帮助