1.2 Java“白皮书”的关键术语
@[toc]
1、概述
Java的设计者发布了“白皮书”,颇具影响,其摘要概括为11个关键术语。
Java SE 白皮书
下面是11个关键术语的主要内容概述。
2、简单性
- Java 语法是 C++ 语法的一个**“纯净”版本**:Java 剔除了 C++ 中许多很少使用的、难以理解的、容易混淆的特性;
- Java 语法非常接近 C++ 语法,C++ 程序员很容易转向 Java(然而,在 Java 发布的时候,C++ 并不是最常用的编程语言);
- “简单”的另一个方面是小,基本的解释器类支持约仅为 40KB ,再加上基础的标准类库和对线程的支持,大约需要增加 175KB ,适合嵌入式设备(当时,这是一个很了不起的成就);
3、面向对象
- 在 Java 开发时面向对象技术已经相当成熟;
- Java 的面向对象特性与 C++ 旗鼓相当;
- 与 C++ 主要不同点在于多继承,在Java中,取而代之的是更简单的接口概念;
- 与 C++ 相比,Java 提供了更丰富的运行时自行功能(见第五章);
**面向对象概念参考文章:**blog.csdn.net/sugar_no1/a…
4、分布式
如今,这种特性被认为是理所当然,但在当时非常厉害!
- Java 有一个丰富的例程库,用于处理向 HTTP 和 FTP 之类的 TCP/IP 协议;
- Java 应用程序能够通过 URL 打开和访问网络上的对象,其便捷程度就像访问本地文件一样;
5、健壮性
- Java 的设计目标之一在于使得 Java 编写的程序具有多面的可靠性;
- Java 非常强调进行:早期的问题检测 + 后期动态(运行时)的检测 + 消除容易出错的情况;
- Java 编译器能够检测出许多在其他语言中仅在运行时才能够检测出来的问题;
6、安全性
Java 要适用于网络/分布式环境。为了实现这个目标,安全性颇受重视。使用 Java 可以构建防病毒、防篡改的系统。
从一开始 Java 就被设计得能够防范各种攻击,其中包括:
- 运行时堆栈溢出,这是蠕虫和病毒常用的攻击手段;
- 破坏自己的进程空间之外的内存;
- 未经授权读写文件;
Java 对不信任的代码在沙箱中执行。但其安全模型很复杂,存在小BUG,后来 Java 浏览器插件不再信任远程代码,除非有数字签名且用户同意执行。(虽然安全模型没有预想中那么成功,但在当时已经很超前!)
7、体系结构中立
- 编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有 Java 运行时环境,这些编译后的代码可以在许多处理器上运行(跨平台,将代码编译成一种统一的字节码,各种系统上的虚拟机读取这种字节码并动态转换成本地机器代码);
- 为“虚拟机”生成代码并不是一种新思路,当时很多语言在很多年前就采用这种方式了;
- 解释虚拟机指令执行肯定比直接执行机器指令慢很多!不过,虚拟机可以将执行最频繁的字节码序列转换成机器码,这一过程称为即时编译;
- Java 虚拟机还有一些其他优点,比如可以检查指令序列的行为,从而增强其安全性;
8、可移植性
数据方面
与 C 和 C++ 不同的是,Java 基本数据类型的大小以及有关运算的行为都有明确的说明;
C 和 C++ 中,int 可能是16位的整数,也可能是32位的整数,也可能是编译器开发商指定的任何其他大小。唯一的限制就是,int类型的字节数不能低于 short int,不能高于 long int。而 Java 的 int 永远为32位的整数。
- 二进制数据以固定的格式进行存储和传输,消除了字序的困扰;
- 字符串采用标准的 Unicode 格式存储;
接口方面
除了用户界面相关的部分,Java 其他库确实能很好地支持平台独立性。
API 方面
Java API 往往比原生 API 质量更高!
9、解释型
- Java 解释器可以在任何移植了解释器的机器上直接执行 Java 字节码。由于连接是一个增量式且轻量级的过程,所以开发过程也变得“更加快捷且具有探索性”;
- 然而,知道 Java9 才提供了 jshell 工具来支持这种“更加快捷且具有探索性”的编程;
10、高性能
近年来,Java 的即时编译器已经非常出色,可以与传统编译器媲美,甚至某些情况超越了传统编译器!
即时编译器可以监控哪些代码频繁执行,并优化这些代码以提高速度。
11、多线程
- 多线程可以带来更快的交互响应和实时行为;
- 摩尔定律即将走到尽头,我们不再追求更快的处理器,而是追求更多的处理器;
- Java 是第一个支持并发程序设计的主流语言,而且非常出色;
12、动态性
库中可以自由地添加新方法和实例变量,而对客户端没有任何影响。