Java的跨平台功能和它的Java虚拟机(简称 JVM)的中介作用是分不开的。所谓跨平台的“平台”指:操作系统。没错,就是我们接触的Linux和Windows等操作系统。Java跨平台,通俗的解释是:用Java编写的程序,既可以在Linux下运行,也可以在Windows下运行。
图解:
以QQ为例,我们平时在Windows上使用的QQ不是直接使用的它的源代码,而是经过编译后的.exe文件(可执行文件),但.exe文件只能在Windows上执行,不能在Linux上执行。
Java编写的QQ,在编译时不编译成.exe而是编译为.class文件,也称为字节码文件。Java虚拟机负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一“中间层”,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
JVM是一个“桥梁”,是一个“中间件”,是实现跨平台的关键。Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
注意:
编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如.exe),仍然需要JVM的支持。
有人问到:Java可以跨平台,那么,JVM可以跨平台吗?
的确,跨平台的是Java程序,但不是JVM。JVM是用C/C++开发的软件,是编译后的机器码,所以,不能跨平台,不同平台下仍需要安装不同版本的JVM。