03_Java程序的运行原理

03_Java程序的运行原理

一、编译型语言&解释型语言

​ 我们编写的程序通常是以源代码的形式存在的,它介于我们日常使用的自然语言和计算机的机器语言之间,人类能勉强读懂,机器却不能直接运行,必须翻译为机器语言才行。按照源代码被执行的方式,编程语言可以被分为编译型解释型两种。

​ 打个比方:如果源代码是一篇中文文章,那么不同的设备就是说着不同语言的外国人。尽管他们的语言都由拉丁字母(01组成的机器码)构成,但各自的单词和句子组成方式却不同。

编译型语言会借助编译器提前把文章 “翻译” 成当地语言,方便阅读(运行),得到的是一个当地人(对应设备)直接可读(可以运行)的文章(程序)。这个把源代码转换为对应设备的机器码的过程,就叫做编译;

​ 相反,解释型语言会保留源代码,事先不进行 ”翻译“, 而是给不同的设备配备一个会 ”同声传译“ 的翻译机(解释器)。每次想要阅读(运行)文章(源程序)的时候,都需要使用翻译机(解释器逐行翻译为本地语言,才能读懂(运行)这篇文章(源代码)。

01_编译型与解释型

​ 两种方式各有优缺点,比如编译型语言编写的程序虽然可以直接运行,但无法跨平台(即同时在Windows/Linux/MacOS等系统上运行),正如翻译成英文的文章没法给只会西班牙语的人看。而解释型语言每次都要借助解释器来运行,效率比编译型语言差的不是一点半点;相应的,只要在各平台上配备好解释器,就可以做到 ”一份源码,到处运行“。这两种类型的语言都能存续至今,就说明它们各有用途所在。以下列出两种类型语言的特征和常见的对应语言,以供参考:

编译型 解释型
运行方式 编译为机器码 依赖解释器
运行速度 快(直接运行) 较慢(根据源代码逐行解释)
跨平台性
调试难度 大(需要特定工具) 较低(可以直接定位源代码)
代码安全 高(反编译困难) 低(可直接接触源代码)
常见语言 C/C++、Go Python、JavaScript*

​ *PS: JavaScript(简称 JS)和 Java并没有关联,只是名字里都带个 Java。更准确地说,反而是 JS蹭了 Java的热度——当时 Java如日中天,于是 JS的发行方就把 Java这几个字母放进了这种语言的名称里。

二、混合型语言与 Java

​ 除了上述两种类型以外,还有一种介乎两者之间的语言类型——混合型语言。这类语言既需要编译器,又需要解释器;各方面的性能也介于编译型和解释型之间。它们试图在运行效率与开发效率之间寻找一个平衡。[1]

​ 这样的语言会把源程序编译为一种中间态:效率比源程序高,但仍需要解释器解读。用文章打比方,就是用原语言做的简易笔记——意思更凝练,但还是需要翻译官,且最终表达出来的内容需要翻译官自行发挥。Java正是这样的一门语言

02_混合型语言

​ 在 Java语言中,源代码会被编译为字节码。还记得上一篇文章(02_初识 Java)中的 .class 文件吗?这就是字节码。它无法用常规的方法查看(总是显示乱码),可以用专门的反编译软件还原为 Java源代码。

​ 运行 .class 字节码时,就要用到在 01_在学习Java之前 中提到的 JVM(Java虚拟机)。程序实际上是在这个虚拟机内运行,在这个过程中调用了对应平台的解释器

​ 由此,Java具备了良好的跨平台性,同时也有着较快的运行速度(相较解释型语言)。这正是 Java理念的体现:“一次编写,到处运行”。

​ 像 Java一样属于混合型语言的还有微软推出的 C#(C Sharp),以及 JetBrains公司的 Kotlin。感兴趣的话可以自行搜索一下。

参考资料:

[1] 编译型语言、解释型语言与混合型语言:原理、区别与应用场景详解_编译技术,解析技术-CSDN博客

本文完。作者:Cecil1229,博客:https://www.cnblogs.com/Cecil1229 ,转载请标明出处

posted @ 2025-08-25 13:38  Cecil1229  阅读(6)  评论(0)    收藏  举报