计算机高级语言按程序的执行方式可分为:编译型语言和解释型语言。
编译型语言是指使用专门的编译器、针对特定的平台,将源程序编译成该平台可以执行的机器码(包括机器指令和操作数),即目标程序,编译结束后,可能还需要链接其他目标程序,最终生成可执行性程序,实现底层次的复用。编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行。但是编译型语言的程序平台依赖性强,当移植到其他平台上时需要重新编译。这类语言现有c ,c++,fortran,pascal等。
解释型语言是指使用专门解释器对源程序逐行解释成特定平台上的机器码,它将编译和解释混合在一起同时来完成,每次执行解释性语言的程序都要进行一次编译,因此效率比较低,但有个优点就是跨平台性好,只有要提供特定平台的解释器,就可解释成该平台上的机器指令。现有的ruby,python等语言都是解释性语言。
java是一种特殊的高级语言, 它既是编译型语言又是解释型语言,需要先编译后解释。首先由编译器编译成与平台无关的字节码(也就是.class文件),当然,这个字节码时不可执行的,必须用java解释器来解释执行。java语言里谁来负责解释执行字节码文件呢——java虚拟机(jvm),所有平台上jvm向编译器提供接口,编译成虚拟机能够理解字节码,然后由虚拟机来解释执行。
当使用java编译器编译java程序时,生成与平台无关的字节码,它不需要面向特定平台,而只面向jvm。不同平台的jvm不同,但他们提供了相同的接口。jvm是java跨平台的关键部分。