Java“白皮书” 的关键术语

1.2 Java“ 白皮书” 的关键术语
        Java 的设计者已经编写了颇有影响力的“ 白皮书” ,用来解释设计的初衷以及完成的情况,并且发布了一个简短的摘要,这个摘要用下面 11 个关键术语进行组织:
1 ) 简单性
2 ) 面向对象
3 ) 分布式
4 ) 健壮性
5 ) 安全性
6 ) 体系结构中立
7 ) 可移植性
8 ) 解释型
9 ) 高性能
10 ) 多线程
11 ) 动态性


1.2.1 简单性
        人们希望构建一个无须深奥的专业训练就可以进行编程的系统, 并且要符合当今的标准惯例。 因此, 尽管人们发现 C++ 不太适用, 但在设计 Java 的时候还是尽可能地接近 C++, 以便系统更易于理解 , Java 剔除了 C++ 中许多很少使用、 难以理解、 易混淆的特性。 在目前看来, 这些特性带来的麻烦远远多于其带来的好处 。的确, Java 语法是 C++ 语法的一个“ 纯净” 版本。这里没有头文件、 指针运算(甚至指针语法 )、结构、 联合、 操作符重载、 虚基类等(请参阅本书各个章节给出的 C++ 注释, 其中比较详细地解释了 Java 与 C++ 之间的区别) 。然而 ,设计者并没有试图清除 C++ 中所有不适当的特性。例如, switch 语句的语法在 Java 中就没有改变。 如果你了解 C++ 就会发现可以轻而易举地转换到 Java 语法 。
        Java 发布时,实际上 C++ 并不是最常用的程序设计语言。很多开发人员都在使用 VisualBasic 和它的拖放式编程环境。 这些开发人员并不觉得 Java 简单。很多年之后 Java 开发环境才迎头赶上如今 ,Java 开发环境已经远远超出大多数其他编程语言的开发环境简单的另一个方面是小。 Java 的目标之一是支持开发能够在小型机器上独立运行的软件。 基本的解释器以及类支持大约仅为 40KB。再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核) 大约需要增加 175KB,在当时 ,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。 现在有一个独立的具有较小类库的 Java 微型版(Java Micro Edition), 这个版本适用于嵌人式设备。


1.2.2 面向对象
        简单地讲, 面向对象设计是一种程序设计技术。 它将重点放在教椐 (即对象)和对象的接口上。 用木匠打一个比方, 一个“面向对象的” 木匠始终关注的是所制作的椅子, 第二位才是所使用的工具 ;一个“ 非面向对象的” 木匠首先考虑的是所用的工具。在本质上, Java 的面向对象能力与 C++是一样的。开发 Java 时面向对象技术已经相当成熟。 Java 的面向对象特性与 C++ 旗鼓相当。Java与 C++ 的主要不同点在于多重继承 , 在 Java 中 , 取而代之的是更简单的接口概念。与 C++相比,Java 提供了更丰富的运行时自省功能。


1.2.3 分布式
        Java 有一个丰富的例程库 , 用于处理像 HTTP 和 FIT 之类的 TCP/IP 协议 。Java 应用程序能够通过 URL 打开和访问网络上的对象, 其便捷程度就好像访问本地文件一样 。如今,这一点已经得到认可,不过在 1995 年, 主要还是从 C++ 或 Visual Basic 程序连接Web 服务器。


1.2.4 健壮性
        Java 的设计目标之一在于使得 Java 编写的程序具有多方面的可靠性 。 Java 投入了大量的精力进行早期的问题检测 、 后期动态的 (运行时)检测, 并消除了容易出错的情况… … Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存和损坏数据的可能性。Java 编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。 至于第二点,对于曾经花费几个小时来检查由于指针 bug 而引起内存冲突的人来说, 一定很喜欢 Java的这一特性。


1.2.5 安全性
        Java 适用于网络 / 分布式环境。 为了达到这个目标, 在安全方面投入了很大精力。 使用 Java 可以构建防病毒、 防篡改的系统。
        从一开始, Java 就设计成能够防范各种攻击,其中包括:
•运行时堆栈溢出。 如蠕虫和病毒常用的攻击手段。
•破坏自己的进程空间之外的内存。
•未经授权读写文件。
        原先 , Java 对下载代码的态度是“ 尽管来吧!”。不可信代码在一个沙箱环境中执行,在这里它不会影响主系统。用户可以确信不会发生不好的事情, 因为 Java 代码不论来自哪里 ,都不能脱离沙箱。不过,Java 的安全模型很复杂。Java 开发包( Java Development Kit, JDK) 的第一版发布之后不久,普林斯顿大学的一些安全专家就发现一些小 bug 会允许不可信的代码攻击主系统。最初,安全 bug 可以快速修复。遗憾的是,经过一段时间之后, 黑客已经很擅长找出安全体系结构实现中的小漏洞。Sun 以及之后的 Oracle 为修复 bug 度过了一段很是艰难的曰子。
        遭遇多次高调攻击之后, 浏览器开发商和 Oracle 都越来越谨慎 。 Java 浏览器插件不再信任远程代码 ,除非代码有数字签名而且用户同意执行这个代码。


1.2.6 体系结构中立
        编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。 精心设计的字节码不仅可以很容易地在任何机器上解释执行, 而且还可以动态地翻译成本地机器代码。
        当时 , 为“ 虚拟机” 生成代码并不是一个新思路。 诸如 Lisp、 Smalltalk 和 Pascal 等编程语言多年前就已经采用了这种技术 。当然, 解释虚拟机指令肯定会比全速运行机器指令慢很多。 然而 , 虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码 ,这一过程被称为即时编译Java 虚拟机还有一些其他的优点。它可以检测指令序列的行为, 从而增强其安全性。


1.2.7 可移植性
        与 C 和 C++ 不同,Java 规范中没有“ 依赖具体实现” 的地方基本教据类型的大小以及有关运算都做了明确的说明 。例如,Java 中的 int 永远为 32 位的整数,而在 C/C++ 中, int 可能是 16 位整数、 32 位整数, 也可能是编译器提供商指定的其他大小。唯一的限制只是 int 类型的大小不能低于 shortint, 并且不能高于 long int。在 Java 中, 数据类型具有固定的大小, 这消除了代码移植时令人头痛的主要问题。 二进制数据以固定的格式进行存储和传输, 消除了字节顺序的困扰。字符串是用标准的 Unicode 格式存储的。作为系统组成部分的类库, 定义了可移植的接口例如 , 有一个抽象的 Window类, 并给出了在 UNIX、 Windows 和 Macintosh 环境下的不同实现。选择 Window 类作为例子可能并不太合适。 凡是尝试过的人都知道, 要编写一个在
Windows、 Macintosh 和 10 种不同风格的 UNIX 上看起来都不错的程序有多么困难 Java 1.0 就尝试着做了这么一个壮举 ,发布了一个将常用的用户界面元素映射到不同平台上的简单工具包 。遗憾的是, 花费了大量的心血,却构建了一个在各个平台上都难以让人接受的库。原先的用户界面工具包已经重写, 而且后来又再次重写 ,不过跨平台的可移植性仍然是个问题。不过,除了与用户界面有关的部分外,所有其他 Java 库都能很好地支持平台独立性。 你可以处理文件、 正则表达式、 XML、 日期和时间、 数据库、 网络连接、 线程等 , 而不用操心底层操作系统。不仅程序是可移植的, Java API 往往也比原生 API 质量更高。


1.2.8 解释型
        Java 解释器可以在任何移植了解释器的机器上执行 Java 字节码。 由于链接是一个增量式且轻量级的过程, 所以, 开发过程也变得更加快捷, 更加具有探索性。这看上去很不错。用过 Lisp、Smalltalk 、 Visual Basic、Python、R 或 Scala 的人都知道“ 快捷而且具有探索性” 的开发过程是怎样的。 你可以做些尝试, 然后就能立即看到结果。 Java开发环境并没有将重点放在这种体验上。


1.2.9 高性能
        尽管对解释后的字节码性能已经比较满意, 但在有些场合下还需要更加高效的性能。 字节码可以(在运行时刻 )动态地翻译成对应运行这个应用的特定 CPU 的机器码。
        使用 Java 的头几年,许多用户不同意这样的看法:性能就是“ 适用性更强”。然而 ,现在的即时编译器已经非常出色, 以至于成了传统编译器的竞争对手。在某些情况下,甚至超越了传统编译器, 原因是它们含有更多的可用信息。 例如, 即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即“ 内联”) 。即时编译器知道哪些类已经加载。基于当前加载的类集, 如果特定的函数不会被覆盖,就可以使用内联。必要时,还可以撤销优化。


1.2.10 多线程
          多线程可以带来更好的交互响应和实时行为。如今,我们非常关注并发性, 因为摩尔定律行将完结 。我们不再追求更快的处理器, 而是着眼于获得更多的处理器 , 而且要让它们一直保持工作。不过,可以看到,大多数编程语言对于这个问题并没有显示出足够的重视。Java 在当时很超前。 它是第一个支持并发程序设计的主流语言 。从白皮书中可以看到,它的出发点稍有些不同。当时, 多核处理器还很神秘, 而 Web 编程才刚刚起步,处理器要花很长时间等待服务器响应, 需要并发程序设计来确保用户界面不会“ 冻住”。并发程序设计绝非易事,不过 Java 在这方面表现很出色, 可以很好地管理这个工作。


1.2.11 动态性
        从各种角度看, Java 与 C 或 C++ 相比更加具有动态性。 它能够适应不断发展的环境库中可以自由地添加新方法和实例变量, 而对客户端却没有任何影响。 在Java 中找出运行时类型信息十分简单。当需要将某些代码添加到正在运行的程序中时, 动态性将是一个非常重要的特性。一个很好的例子是: 从 Internet 下载代码 ,然后在浏览器上运行。 如果使用 C 或 C++, 这确实难
度很大,不过 Java 设计者很清楚动态语言可以很容易地实现运行程序的演进。最终,他们将
这一特性引入这个主流程序设计语言中。
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Introduction to Java 1.1Beginnings of the Java Language Project 1.2Design Goals of Java 1.2.1Simple, Object Oriented, and Familiar 1.2.2Robust and Secure 1.2.3Architecture Neutral and Portable 1.2.4High Performance 1.2.5Interpreted, Threaded, and Dynamic 1.3The Java Platform--a New Approach to Distributed Computing 2. Java--Simple and Familiar 2.1Main Features of the Java Language 2.1.1Primitive Data Types 2.1.2Arithmetic and Relational Operators 2.1.3Arrays 2.1.4Strings 2.1.5Multi-Level Break 2.1.6Memory Management and Garbage Collection 2.1.7The Background Garbage Collector 2.1.8Integrated Thread Synchronization 2.2Features Removed from C and C++ 2.2.1No More Typedefs, Defines, or Preprocessor 2.2.2No More Structures or Unions 2.2.3No Enums 2.2.4No More Functions 2.2.5No More Multiple Inheritance 2.2.6No More Goto Statements 2.2.7No More Operator Overloading 2.2.8No More Automatic Coercions 2.2.9No More Pointers 2.3Summary 3. Java is Object Oriented 3.1Object Technology in Java 3.2What Are Objects? 3.3Basics of Objects 3.3.1Classes 3.3.2Instantiating an Object from its Class 3.3.3Constructors 3.3.4Methods and Messaging 3.3.5Finalizers 3.3.6Subclasses 3.3.7Java Language Interfaces 3.3.8Access Control 3.3.9Packages 3.3.10Class Variables and Class Methods 3.3.11Abstract Methods 3.4Summary 4. Architecture Neutral, Portable, and Robust 4.1Architecture Neutral 4.1.1Byte Codes 4.2Portable 4.3Robust 4.3.1Strict Compile-Time and Run-Time Checking 4.4Summary 5. Interpreted and Dynamic 5.1Dynamic Loading and Binding 5.1.1The Fragile Superclass Problem 5.1.2Solving the Fragile Superclass Problem 5.1.3Run-Time Representations 5.2Summary 6. Security in Java 6.1Memory Allocation and Layout 6.2Security Checks in the Class Loader 6.3The Byte Code Verification Process 6.3.1The Byte Code Verifier 6.4Security in the Java Networking Package 6.5Summary 7. Multithreading 7.1Threads at the Java Language Level 7.2Integrated Thread Synchronization 7.3Multithreading Support--Conclusion 8. Performance and Comparisons 8.1Performance 8.2The Java Language Compared 8.3A Major Benefit of Java: Fast and Fearless Prototyping 8.4Summary 9. Java Base System and Libraries 9.1Java Language Classes 9.2Input Output Package 9.3Utility Package 9.4Abstract Window Toolkit 10. The HotJava World-Wide Web Browser 10.1The Evolution of Cyberspace 10.1.1First Generation Browsers 10.1.2The HotJava Browser--A New Concept in Web Browsers 10.1.3The Essential Difference 10.1.4Dynamic Content 10.1.5Dynamic Types 10.1.6Dynamic Protocols 10.2Freedom to Innovate 10.3Implementation Details 10.4Security 10.4.1The First Layer--the Java Language Interpreter 10.4.2The Next Layer--the Higher Level Protocols 10.5HotJava--the Promise 11. Further Reading

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值