08.入门篇-JAVA程序运行原理

8 Java程序运行原理

8.1 原理

  开发的程序通常是有很多英文单词的符号组成,方便人类读写,称为源代码(Source Code),计算机无法理解人类语言,只能识别简单的指令,这些指令称为机器码(Native Code/Machine Code)

image

1.程序员书写源代码(Source Code)

2.计算机只能执行(0/1)类型的机器码(Native Code/Machine Code)

3.因此需要通过编译器,将源代码编译成机器码,再交由计算机执行

4.计算机的机器码,即(0/1)指令也有所差别,主要与机器机底层所用芯片与操作系统有关,目前主流 Windows(使用 Intel芯片 x86 架构)、Mac(使用 ARM Holdings芯片 ARM64 架构)、Linux

5.编译器编译后的机器码只能放到某个特定系统上运行,而非三个主流系统都能使用,因此需要开发三款编译器,编译三个操作系统对应的机器码,而编译器的开发是不简单的,因此需要转换思想

image

6.编译器工作流程:前三步,1.词法分析、2.语法分析、3.语义分析 可以看作是一个阶段,是在理解源代码,第四步,4.代码生成 翻译生成(0/1)类型机器码,前三步工作内容相同,区别只在于第四步

image

7.Java 在编译器后又提供一个 JVM(Java 虚拟机,理解为虚拟的计算机),JVM 有一套自己的指令集,即字节码

8.编译器从而不再需要编译代码为机器码,而只需编译代码为字节码,字节码是 JVM 的规范,可以直接运行在 JVM 上,而 JVM 可以在运行过程中将指令集转换成(0/1)类型的机器码

9.因此只需要为不同的操作系统提供不同的 JVM 既可(安装 JDK 时已自动安装 JVM,分为 Windows、Mac、Linux 的 JVM)

10.从而实现一份源代码,一次编译后形成的字节码,就可以在不同操作系统的JVM 上运行,从而实现跨系统、跨平台运行

优势:

1.一次编译,可以跨系统、跨平台运行

2.编译后的字节码接近于机器码,JVM 运行中不用考虑语法、语义等,直接转译既可,因此运行效率高

8.2 各阶段

image

1.程序员编写源代码

2.编译器编译代码为字节码

3.JVM上运行字节码

8.3 自动编译

image

1.代码运行后会自动生成 out 目录,out 是高级开发工具自动编译输出的目录

2.production 是编译产出的结果,目录结构是:项目 -> 包 -> 代码目录 -> 代码

3. src 下的是 .java 后缀的文件,out 下是 .class 后缀的文件

8.4 手动编译

开发工具进入命令行:选中 src 右键 ->  Open In ->  Terminal ,打开终端且同时在该代码文件 src 目录下

# 手动编译,新生成了一个 Main.class 的字节码文件
PS D:\Software\JavaCode\p1-basic\src> javac .\com\itheima\Main.java
PS D:\Software\JavaCode\p1-basic\src> ls .\com\itheima\Main.java 


    目录: D:\Software\JavaCode\p1-basic\src\com\itheima


Mode                 LastWriteTime         Length Name                                                                                                                            
----                 -------------         ------ ----                                                                                                                            
-a----        2025/11/28     10:36            309 Main.java                                                                                                                       


PS D:\Software\JavaCode\p1-basic\src> ls .\com\itheima\Main.class


    目录: D:\Software\JavaCode\p1-basic\src\com\itheima


Mode                 LastWriteTime         Length Name                                                                                                                            
----                 -------------         ------ ----                                                                                                                            
-a----         2025/12/1     16:58            426 Main.class                                                                                                                      

# 运行编译的文件,这里是java的格式,所以包和目录也要以java形式输入,java 默认是 class 文件,不用输入后缀
PS D:\Software\JavaCode\p1-basic\src> java com.itheima.Main
Hello World!

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-11-27 17:34  马俊南  阅读(6)  评论(0)    收藏  举报