上QQ阅读APP看书,第一时间看更新
1.2.7 可移植性
与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关算法都做了明确的说明。
例如,Java中的int永远为32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。
作为系统组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window类给出了在UNIX、Windows和Macintosh环境下的不同实现。
凡是尝试过的人都知道,要编写一个在Windows、Macintosh和10种不同风格的UNIX上看起来都不错的程序有多么困难。Java 1.0就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具箱。遗憾的是,花费了大量的心血,却构建了一个在各个平台上都难以让人接受的库(而且,在不同平台的图形实现中有不同的bug)。不过,这毕竟是个开端。对于许多应用问题来说,可移植性比华而不实的用户界面更加重要;而且这些应用程序从Java的早期版本中获益匪浅。现在,用户界面工具箱已经完全重写了,不再依赖于主机的用户界面。现在的Java版本比早期版本更加稳定,更加吸引人。