1.不同系统在java平台上运行的java程序(这张图不错) 2.java虚拟机的主要任务就是用类装载器(class loader)从程序和API中装载class文件, 3.java中有两种方法:java方法和本地方法(native method) 并且执行其中的字节码。(类的加载:把class文件读入内存, 并创建一个Class对象) 前者是java语言编写的,与平台无关。后者用c/c++/汇编 编写的,与平台有关
4.通过本地方法,java程序可以直接访问底层操作系统的资源。但是这样用,程序会变成平台相关的,因为包含本地方法的动态库是平台相关了。如果希望保证程序的平台无关性,那么只能通过java API 来访问系统资源
5.运行java程序时,虚拟机装载程序的class文件所使用的java api class文件(任何能运行程序的java虚拟机上都能够获得java api class文件,因为java虚拟机和java api class文件是任何java平台都要实现的必要部分)。所有被加载的class文件(包括从应用程序中和从java api中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在java虚拟机上运行的整个程序。
6.Java API的class文件天生就主机平台密切相关。在一个平台能够支持java程序以前,必须在这个特定平台上明确地实现API的功能。为访问主机上的本地资源,Java API调用了本地方法。出于API class文件调用了本地方法,Java程序就不再需要调用它们了。通过这种方法,Java API class文件为底层主机提供了具有平台无关性的、标准接口的Java程序。对Java程序而言,无论平台内部如何,Java API都会有同样的表现和可预测的行为。正是由于在每个特定的主机平台上都明确地实现了Java虚拟机和Java API,因此,Java程序自身就能够成为具有平台无关性的程序。(但是一些图形界面库因为不同系统风格不同,所以有例外)