Java既是编译型语言,也是解释型语言。
首先先查找关于两种语言的特性及运行机制。
什么是编译呢?通过查找资料,大概就是使用专门的编译器,针对特定的平台将高级语言源代码一次性“翻译”成可以被该平台及其执行的机器码,并包装成该平台能够识别的可执行程序的格式。ps:计算机当然只能看不懂我们敲得代码。
解释则是通过专门的解释器对源程序解释成平台需要的机器码并且立即执行,也就是每次执行之前,都需要解释一遍。
windows下的exe文件
,运行可执行程序的时候就不需要再进行编译了,而是直接运行。而解释型语言编写的程序每执行一次,就要翻译一次,效率偏低。C,C++,Objective-C,Pascal等高级语言都是编译型语言。
Ruby,Python等语言都是解释型语言。
而Java就很奇怪,真的很怪,又编译,又解释。
Java的编译并不会生成特定平台的机器码,而是与平台无关的字节码,也就是.class
文件。
.class
文件通过Java虚拟机,即JVM(Java Virtual Machine)翻译成本地的机器码才能执行,这就是解释的过程。
经过编译生成的字节码不面向平台,而是JVM,JVM作为一个交换器把一份字节码分别翻译成不同平台所需要的,这就是Java跨平台性体现的关键之处。
下图为执行Java程序的步骤:
JDK(Java Runtime Environment)提供了javac.exe
对编写的.java
文件进行编译,形成字节码文件,以及Java.exe
加载Java类文件,并逐步对字节码文件进行编译。
在此鸣谢:
原文:https://www.cnblogs.com/summerday152/p/11809232.html