• javac 和 java 命令


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

    Java 程序

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

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

    1-1

    javac 命令

    命令格式:

    javac  ".java 文件 "
    
    • 1

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

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

    如下图所示:

    1-2

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

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

    1-3

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

    如下图所示:

    1-4

    java 命令

    命令格式:

    java 类名
    
    • 1

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

    1-5

    流程

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

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

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

    1-6

    注意

    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++ 编写的。

    0-1

    总结

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

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

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

  • 相关阅读:
    对二分查找的重写
    租车系统源码
    汇编语言实现for循环?怎么实现的,形象的比喻
    Pohlig-Hellman算法解决DLP问题
    金融壹账通香港上市:市值63亿港元 叶望春称守正笃实,久久为功
    字节面试题:如何保证缓存和数据库的一致性
    堆的原理以及实现O(lgn)
    详解一致性哈希
    【HashMap】1w字解析HashMap底层部分源码
    Rule-Engine-Starter V1.0.0
  • 原文地址:https://blog.csdn.net/lfm1010123/article/details/126854467