
1.1.2 Java语言实现机制
Java语言是一种高级语言,因此不能够被计算机的CPU直接接收,必须通过一个功能强大的翻译器将Java高级语言翻译成计算机CPU可以接收的机器语言。
1.翻译器
翻译器有两种:一种是编译器(compiler),另一种是解释器(interpreter)。编译器和解释器的作用都是将高级语言写好的程序翻译成计算机CPU能够接收的机器语言,不同的只是翻译的方式不同。编译器是把程序全部翻译成机器语言后,CPU再运行翻译好的全部机器语言;解释器是在程序运行时每翻译一句高级语言就传递给CPU,CPU立即运行这部分翻译好的机器语言。显然,用编译器程序运行速度较快,但翻译时间较长;用解释器翻译时间短,但运行速度较慢。
2.Java虚拟机
Java语言并没有用编译器直接将程序翻译成机器语言,而是先翻译成字节码(byte code),这样编译的时间大大减少。字节码类似于机器指令,但又不是为某个特定的机器定义的,因此,字节码格式的程序是不能被计算机的CPU直接接收的,一般不能在某个具体的平台上执行,而需要由Java运行系统中的解释器来解释执行。这个解释器也叫Java虚拟机(Java Virtual Machine,JVM)。
因此,Java程序的执行需要经过两个步骤:第一步由编译器将Java程序编译为字节码;第二步由Java虚拟机解释执行字节码,将字节码翻译成机器语言。第二步是在程序运行过程中进行的,但是时间远比一般的编译器要快。而且Java虚拟机是针对每一台计算机的,也就是说,当同一个程序在具有不同类型操作系统的计算机上运行时,Java编译器先将程序翻译成同样的字节码文件,Java虚拟机再根据所在计算机操作系统的不同,解释成相应的机器语言。Java语言的翻译方法如图1-1-1所示。JVM运行的代码存储在.class文件中,每个文件最多包含一个public类的代码。

图1-1-1 Java语言工作原理示意图
从本质上讲Java语言是解释型语言,但Java通过预先将源代码编译成接近于机器指令的字节码,有效地克服了传统解释型语言的性能瓶颈,同时又保持了解释型语言的可移植性特点。