平台无关性:
Java体系结构对平台无关性的支持:
① Java平台
Java平台扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色,Java程序被编译成可运行于Java虚拟机中的二进制程序,并且假定Java API的class文件在运行时都是可用的,接着虚拟机运行程序,那些API则给予程序访问底层计算机资源的能力。无论Java程序被部署到何处,它只需要与Java平台交互,而不需要担心底层的硬件和操作系统。因此,他就能够运行于任何拥有Java平台的计算机。
② Java语言
Java语言的基本数据类型的值域和行为都是由语言自己定义的,在像C或者C++这样的语言中,基本整数类型int的值域是由它的占位宽度决定的,而它的占位宽度则由目标平台决定,一般来说,C或者C++中int的占位宽度是由编译器根据目标平台的字长来决定,这就意味着针对不同平台的变异的同一个C++程序在运行时可能会有不同的行为,这仅仅是因为基本数据类型在不同的平台上的值域不同。而java中的int都是32位二进制补码表示的有符号整数,而float则总是遵循浮点标准的32位浮点数。这一点在Java虚拟机内部以及class文件中都是一致的,通过确保基本将数据类型在所有平台上的一致性,java语言本身为Java程序的平台无关性提供强有力的支持。
③ Java class文件
Class文件定义了一个特定于Java虚拟机的二进制格式,Java class可以在任何平台上创建,也可以被任何平台的Java虚拟机装入并运行。它的格式包括多字节值得高位存放约定,都有严格的定义,并且都是Java虚拟机所在平台无关的。
④ 可伸缩性
Java平台可以在各种各样不同类型的(从嵌入式设备到大型主机)计算机上实现。每一个平台提供的API子集都是面向一个特定的目标领域。最终Sun改变过的API定义方式得到了三个基础API集合,他们表现Java平台不同的伸缩性:
企业版(J2EE)
标准版(J2SE)
微型版(J2ME)
当编写一个平台独立的Java程序时,必须遵守的一条最重要的原则是:不要直接或者间接调用不属于Java API的本地方法,调用Java API意外的本地方法将使程序平台相关。
平台无关的七个步骤:
为了保证程序的最佳可移植性而可采取的途径:
① 选择程序要运行的主机和设备的集合(你的“目标宿主机”)
② 在目标宿主机中选择自认为足够好的Java平台版本,在该版本Java平台上编写、运行程序。
③ 对于每个目标宿主机,选择一些程序将要运行的Java平台实现(你的“目标运行时环境”)
④ 编写程序,使它只通过Java API的标准运行库来访问计算机(不要调用本地方法,或开发商专有的那些调用本地方法的库)
⑤ 编写程序,使它不依赖垃圾收集器及时终结的正确性,也不依赖线程的优先级。
⑥ 努力设计一个用户界面,使它在你所有的目标宿主机上都能正常工作。
⑦ 在所有的目标运行时环境和所有的目标宿主机上测试程序