翻译程序:是指的将高级语言翻译成机器语言的过程。
预备知识:
计算机的层次结构大致可以分为五层结构:高级语言、汇编语言、操作系统、机器语言、微指令系统。
翻译程序可以分为两种情况:编译程序和解释程序
#f:4:7:2:7:1:5:a:f:b:8:0:b:f:e:d:2:3:0:c:6:b:1:7:8:2:c:f:a:4:e:0#
编译程序
所谓编译程序,就是指将“源程序”一次性编译成“机器语言”,也即“可执行文件exe”。编译完成后,再执行该文件。例如C语言程序,就是先全部编译为机器语言再执行。(参看C语言的编译过程:预处理-编译-汇编-链接-装入)
解释执行
所谓解释执行,就是指对于“源程序”,翻译一条句子为机器语言,立即执行该句子,执行完成后,再继续翻译旁边的一条句子,在执行。依次:翻译一条句子就立刻执行一条句子。例如Python
特例:JAVA,一次编译,到处执行
JAVA并不完全相同于上述两种情况,Java引入了字节码文件(.class)以及JAVA虚拟机(JVM)的概念。详细来说,就是:java类似于C语言一次性把源程序编译完成,但是C程序是将源程序直接编译为机器语言了,而java程序则是编译为了字节码文件(.class)。随后,java的字节码文件在装载有JVM的机器上被解释为机器语言,再执行。
#e:7:e:b:6:2:4:8:6:3:1:3:1:f:e:e:3:0:5:c:1:7:f:3:d:a:b:a:6:c:7:4#
Java编译器将.java文件编译成字节码(.class文件),class文件中的代码是是一种中间代码,介于源程序与机器码之间,该字节码不能被除JVM外任何平台所理解,当JVM接收到字节码,它会辨识出它所工作的平台,然后将字节码转换为原生的机器码。
总结来说:java的编译过程,相当于在c的编译过程中降低了一个环节,即从"源程序–>机器语言"变成了"源程序–>字节码文件–>机器语言",而字节码文件只有JVM能够辨识理解。因此,这个新增的流程,使得java没有C/C++运行这么快速,但是新增了“跨平台性”,只要有jvm的机器都能执行字节码文件,也即“一次编译,到处执行”。