Java 的设计者已经编写了颇有影响力的“ 白皮书”,用来解释设计的初衷以及完成的情
况,并且发布了一个简短的摘要, 这个摘要用下面 11 个关键术语进行组织:
1 ) 简单性 2 ) 面向对象
3 ) 分布式 4 ) 健壮性
5 ) 安全性 6 ) 体系结构中立
7 ) 可移植性 8 ) 解释型
9 ) 高性能 10 ) 多线程
11 ) 动态性
1)简单性的解释:
Java 的目标之一是支持开发能够在小型机器上独立运行的软件。 基本的解释器以及类支持大约仅为 40KB ; 再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核) 大约需要增加 175KB
2 ) 面向对象的解释:
Java与 C++ 的主要不同点在于多重继承, 在 Java 中, 取而代之的是更简单的接口概念。与 C++相比, Java 提供了更丰富的运行时自省功能。
简单地讲, 面向对象设计是一种程序设计技术。 它将重点放在教椐 (即对象)和对象的接口上。
用木匠打一个比方, 一个“ 面向对象的” 木匠始终关注的是所制作的椅子, 第二位才是所使用的工具;一个“ 非面向对象的” 木匠首先考虑的是所用的工具。在本质上, Java 的面向对象能力与 C++是一样的。
3 ) 分布式的解释:
Java 有一个丰富的例程库, 用于处理像 HTTP 和 FIT 之类的 TCP/IP 协议。Java 应用
程序能够通过 URL 打开和访问网络上的对象, 其便捷程度就好像访问本地文件一样。
4 ) 健壮性的解释:
Java 的设计目标之一在于使得 Java 编写的程序具有多方面的可靠性 .:, Java 投入
了大量的精力进行早期的问题检测、 后期动态的 (运行时)检测, 并消除了容易出
错的情况… … Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存
和损坏数据的可能性。
Java 编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。作为一个开发,不得不提到一个习惯:就是将可能的错误都转变成可以变编译器所察觉的错误。这对于减少bug的出现比较重要。
5 ) 安全性的解释:
Java 就设计成能够防范各种攻击,其中包括:
•运行时堆栈溢出。 如蠕虫和病毒常用的攻击手段。
•破坏自己的进程空间之外的内存。
•未经授权读写文件。
Java 浏览器插件不再信任远程代码,除非代码有数字签名而且用户同意执行这个代码。
6 ) 体系结构中立的解释:
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。
当然, 解释虚拟机指令肯定会比全速运行机器指令慢很多。 然而, 虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译Java 虚拟机还有一些其他的优点。它可以检测指令序列的行为, 从而增强其安全性。
7 ) 可移植性的解释:
本教据类型的大小以及有关运算都做了明确的说明 ,在 Java 中, 数据类型具有固定的大小, 这消除了代码移植时令人头痛的主要问题。 二进制数据以固定的格式进行存储和传输, 消除了字节顺序的困扰。字符串是用标准的 Unicode 格式存储的。
8 ) 解释型的解释:
Java 解释器可以在任何移植了解释器的机器上执行 Java 字节码。 由于链接是一个增量式且轻量级的过程, 所以, 开发过程也变得更加快捷, 更加具有探索性。
9 ) 高性能的解释:
尽管对解释后的字节码性能已经比较满意, 但在有些场合下还需要更加高效的性能。 字节码可以(在运行时刻 )动态地翻译成对应运行这个应用的特定 CPU 的机器码。
即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即“ 内联”)。即时编
译器知道哪些类已经加载 = 基于当前加载的类集, 如果特定的函数不会被覆盖,就可以使用内联。必要时,还可以撤销优化。
10 ) 多线程的解释:
多线程可以带来更好的交互响应和实时行为。
如今,我们非常关注并发性, 因为摩尔定律行将完结。我们不再追求更快的处理器, 而是着眼于获得更多的处理器, 而且要让它们一直保持工作。
11 ) 动态性
从各种角度看, Java 与 C 或 C++ 相比更加具有动态性。 它能够适应不断发展的环境库中可以自由地添加新方法和实例变量, 而对客户端却没有任何影响。 在Java 中找出运行时类型信息十分简单。
当需要将某些代码添加到正在运行的程序中时, 动态性将是一个非常重要的特性。一个很好的例子是: 从 Internet 下载代码,然后在浏览器上运行。 如果使用 C 或 C++, 这确实难度很大,不过 Java 设计者很清楚动态语言可以很容易地实现运行程序的演进。最终,他们将这一特性引入这个主流程序设计语言中。