4.8.1 为什么说 Java 是平台独立性语言
平台独立性是指可以在一个平台上编写和编译程序,而在其他平台上运行。保证 Java 具有平台独立性的机制为「中间码」和「Java 虚拟机(Java Virtual Machine,JVM)」。Java 程序被编译后不是生成能在硬件平台上可执行的代码,而是生成了一个「中间码」。不同的硬件平台上会安装有不同的 JVM,由 JVM 来负责把「中间码」翻译成硬件平台能执行的代码。由此可以看出 JVM 不具有平台独立性,而是与硬件平台相关的。
解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由「类装载器」完成。被装入的代码由字节码校验器进行检查。
Java 字节码的执行也分为两种方式:即时编译方式与解释执行方式,即时编译方式指的是解释器先将字节码编译成机器码,然后再执行该机器码。解释执行方式指的是解释器通过每次解释并执行一小段代码来完成 Java 字节码程序的所有操作。通常采用的是解释执行方式。
而在 C/C++ 语言中,编译后的代码只能在特定的硬件上执行,换个硬件平台这些代码就无法执行了,从而也导致了 C/C++ 没有跨平台的特性。但 C/C++ 有更高的执行效率。
常见笔试题:
1.一个 Java 程序运行从上到下的环境次序是( )。
A.操作系统、Java 程序、JRE/JVM、硬件 B.JRE/JVM、Java 程序、硬件、操作系统
C.Java 程序、JRE/JVM、操作系统、硬件 D.Java 程序、操作系统、JRE/JVM、硬件
答案:C。见上面讲解。
2.下列说法中,正确的是( )。
A.Java 程序经编译后会产生机器码 B.Java 程序经编译后会产生字节码
C.Java 程序经编译后会产生 DLL D.以上都不正确
答案:B。.java 文件被 javac 指令编译为.class 后缀的字节码文件,再由 JVM 执行。
4.8.2 Java 平台与其他语言平台有哪些区别
Java 平台是一个纯软件的平台,这个平台可以运行在一些基于硬件的平台(例如 Linux、Windows 等)之上。Java 平台主要包含两个模块:JVM 与 Java API(Application Program Inter-face,应用程序接口)。
JVM 是一个虚构出来的计算机,用来把 Java 编译生成的中间代码转换为机器可以识别的编码并运行。它有自己完善的硬件架构,例如处理器、堆栈、寄存器等,还具有相应的指令系统,它屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(即字节码),就可以在多种平台上不加修改地顺利运行。每当一个 Java 程序运行时,都会有一个对应的 JVM 实例,只有当程序运行结束后,这个 JVM 才会退出。JVM 实例通过调用类的 main()方法来启动一个 Java 程序,而这个 main()方法必须是公有的、静态的且返回值为 void 的方法,该方法接受一个字符串数组的参数,只有同时满足这些条件才可以作为程序的入口方法。
Java API 是 Java 为了方便开发人员进行开发而设计的,它提供了许多非常有用的接口,这些接口也是用 Java 语言编写的,并且运行在 JVM 上。
4.8.3 JVM 加载 class 文件的原理机制是什么
Java 语言是一种具有动态性的解释型语言,类(class)只有被加载到 JVM 中后才能运行