一个 Java 程序的编译、运行的流程

  • Java 程序
  • javac 命令
  • java 命令
  • 流程
  • 注意
  • 总结


Java 程序

我们创建一个 " .java " 文件。
并在文件中写入下面的代码,一个 Student 类,一个 Hello 类。

如何创建一个 " .java " 文件 ?
很简单,先创建一个 " .txt " 的文本文档,然后往里面写入代码,再将后缀改为 " .java " 即可。这里应该注意:文件名需要与代码中的 public class 类的类名要相同。

javac 文件名不准确 javac 文件名.java_JVM

javac 命令

命令格式:

javac  ".java 文件 "

在 " Hello.java " 文件存在的目录中,通过 Powershell 或 cmd 打开。

先说 Powershell,打开方式:【Shift】+ 鼠标右键。

如下图所示:

javac 文件名不准确 javac 文件名.java_Java_02

如下图所示,通过 javac 命令后,可以看到,刚刚的 " .java " 文件下的目录,出现了两个 " .class " 文件。而这个由 " .java " 到 " .class " 的过程,我们称之为 " 编译 ".

可以看到 javac 命令,编译是通过按类来的,代码中有几个类,编译出来的文件就有几个 " .class ".

javac 文件名不准确 javac 文件名.java_Java_03

cmd 窗口我就不演示了,其实是一样的。打开方式:【Win】+ 【R】,输入 CMD.
只不过 cmd 窗口需要通过 cd 命令来切换 " 当前目录 ".

如下图所示:

javac 文件名不准确 javac 文件名.java_Java_04

java 命令

命令格式:

java 类名

java 命令就是用来运行刚刚生成的 " .class " 文件的,我们需要运行哪个类,就 java 哪个类,可以看到,运行后的结果和我们平时在 " IDEA 终端 " 效果差不多。

javac 文件名不准确 javac 文件名.java_JVM_05

流程

Java 程序就是我们平时写的 Java 代码,计算机将我们的 Java 代码以 " .java " 文件的格式保存至磁盘上。

Java 字节码文件实际上就是一个经编译后的 " .class " 文件,里面的数据都是二进制,当我们通过记事本打开的时候,可以发现是乱码。

JVM 拿到 " .class " 文件,就可以进行执行其中的字节码。这一步骤称为 " 运行 ",通过 java 命令 来操作。

javac 文件名不准确 javac 文件名.java_java_06

注意

JDK:Java 开发工具包( Java Developer’s Kit )
JRE:Java 运行环境( Java Runtime Environment )
JVM:Java 虚拟机( Java Virtual Machine )

因为我们编写的 Java 代码最终是在 JVM 上运行的,所以才屏蔽了 " 操作系统的差异性 "。 然而,光有 JVM 自己,什么也干不了,你需要给它提供生产原料 " .class文件 "。仅仅是 JVM,是无法完成一次编译,处处运行的。它需要一个基本的类库,比如怎么操作文件、怎么连接网络等等。JVM 标准加上一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE. 然而,JDK 就更为庞大了,它还提供了一些非常好用的小工具,比如 " javac、java、jar " 等等…

我们必须必须明确,javac 和 java 这两个命令是 JDK 提供的,此外,上述的这一系列的过程,同样需要依赖 JDK、JRE、JVM.

而 JDK 是包含 JRE 和 JVM 的,所以,我们可以通过 Oracle 官网下载 JDK 即可。下载的过程我就不展示了,B 站有很多教程。JVM 其实就是一个软件,它底层是由 C / C++ 编写的。

javac 文件名不准确 javac 文件名.java_JVM_07

总结

通过本篇博客,我们就能够明白 Java 的 " 跨平台 " 特性了,因为我们编写的 Java 代码最终是在 JVM 上运行的,所以才屏蔽了 " 操作系统的差异性 "。此外,更能理解一个 Java 程序是怎么从编译到最终的运行结果的。

然而,我们平时使用的都是 IDEA,它有效地解决了上述的很多麻烦事,但 IDEA 依旧需要基于 JDK 才能进行开发。IDEA 将我们平时写的代码,最终其实都是会编译成 " .class " 文件,然后放在了【target】目录下,所以,JVM 依然只认识 " .class " 文件,才能运行。只是我们平时点击 " 运行 " 按钮的时候,感知不到而已。

我认为,理解编译和运行的原理,理解 javac 和 java 命令,对我们认识 Java 只有好处,并没有坏处。