大话Java:程序设计从入门到精通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 跨越平台无障碍,Java语言显身手

在本章1.1节讲过,操作系统看不懂用高级编程语言编写出来的源程序,但是能看得懂编译生成的可执行程序。那么,对于同一个可执行程序文件,是不是所有的操作系统都能看得懂呢?答案是否定的。例如,IE浏览器只能在Windows操作系统中运行,到了Linux操作系统中就无法运行,这是因为IE浏览器的可执行程序文件中包含了只有Windows操作系统才能看得懂的操作指令。

如图1-5所示,假如悟空想编写一个在Windows和Linux操作系统中都能运行的程序,那么就需要把源程序分别编译成适合这两种操作系统的可执行程序。

图1-5 把源程序分别编译成适合Windows和Linux的可执行程序

悟空觉得这样做还是有点麻烦,要是有一种编程语言可以跨操作系统平台就好了,这意味着只需对用这种语言编写出来的源程序编译一次,编译出来的可执行程序能够在所有的操作系统中运行。刚好Java语言就是悟空所期望的跨操作系统平台的高级编程语言。

Java语言为何会有跨操作系统平台的本领呢?这还得归功于Java虚拟机。Java虚拟机这名字听上去很玄乎!Java 虚拟机看不见摸不着,到底算何方神圣?它可不是工厂里庞大无比的机器,其实它本身也不过是个可执行程序,这个可执行程序的任务就是运行Java程序。

如图1-6所示,Java 虚拟机程序本身不是跨操作系统平台的,对于不同的操作系统,有着不同的Java虚拟机可执行程序。不过,不管是哪个操作系统中的Java虚拟机,它们的任务都是一样的,该任务就是请求底层操作系统运行Java程序。

图1-6 Java程序的跨操作系统平台运行的过程

从图1-6可以看出,Java 源程序是以“.java”作为扩展名的文件,编译生成的可执行程序是以“.class”作为扩展名的文件。Java可执行程序本身不能直接在操作系统中运行,它必须借助Java虚拟机才能运行。Java可执行程序中包含只有Java虚拟机才能看得懂的二进制字节码指令,而Windows和Linux操作系统都无法直接看得懂这些二进制字节码指令。