购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Java跨平台原理

Java是一种面向对象的通用编程语言,提供了很好的平台独立性,能够实现“一次编译,到处运行”。

用C语言开发程序时,C语言的编译器只为特定机器生成本机可执行代码,编译过程如图2-1所示。当一个程序用C/C++语言编写和编译时,代码可直接转换成机器可执行的文件。例如在Windows操作系统上,代码会生成为.exe文件,并且生成的.exe文件只能在Windows操作系统中运行,而不能在Linux操作系统中运行。

图2-1 C语言编译过程

Java语言与C/C++语言相比,程序的编译和运行是完全不同的,Java编译器会将Java源文件编译成字节码文件(.class文件),编译过程如图2-2所示。而生成的字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,与生成它们的平台无关,例如同一个Java源文件在Windows中生成的字节码与在Linux中生成的字节码是完全一致的。

图2-2 Java编译过程

字节码文件只有在JVM中才能运行。JVM是用C/C++语言开发的,编译后得到机器执行的文件,JVM本身是不能跨平台的,不同平台下需要安装不同版本的JVM,如图2-3所示。例如,在Windows平台上有.exe文件,在Linux平台上有.rpm文件,在Mac平台上有.dmg文件。

虽然不同平台上有不同的JVM版本,但是Java语言委员会对JVM做了统一规范,详细规定了.class文件结构、数据类型、方法与属性定义、线程执行过程、编译过程,确保同一个class文件在不同操作系统的JVM中的执行结果是一致的,如图2-4所示。

图2-3 JVM操作系统版本

图2-4 字节码文件跨平台执行

同一个Java文件在不同平台编译会生产同样的字节码文件,同一个字节码文件在不同的JVM中执行会得到相同的结果,这样就很好地保证了Java的跨平台特性。 547yxd9UBvxVgGrk/fVSYQVYazY+59NWOBy6PmvajI/cBFE3WDu8n/lp9SCaHOgM

点击中间区域
呼出菜单
上一章
目录
下一章
×