第1章 Java程序设计概述
1.1 Java程序设计平台
1.2 Java“白皮书”的关键术语
- 简单性 2)面向对象 3)网络技能(Network-Savvy) 4)健壮性 5)安全性 6)体系结构中立 7)可移植性 8)解释型 9)高性能 10)多线程 11)动态性
1.2.1 简单性
Java语法是C++语法的一个“纯净版本”。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。
如果已经习惯于使用可视化的编程环境(例如Visual Basic),你就不会觉得Java简单了。Java有许多奇怪的语法(尽管掌握其要领并不需要很长时间)。Visual Basic的魅力在于它的可视化设计环境几乎自动地为应用程序提供了大量基础结构。而使用Java实现同样的功能却需要手工编制代码,通常代码量还相当大。
简单性另一方面就是小:基本解释器及类支持大约仅为40KB,再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核)大约需要增加175KB。
1.2.2 面向对象
Java的面向对象特性与C++旗鼓相当。Java和C++的主要不同点在于多继承,在Java取而代之的是简单的接口概念,以及Java的元类(metaclass)模型(这部分内容将在第5章讨论)。
1.2.3 网络技能
打开socket链接这类繁重的任务在Java中变得简单。远程方法调用机制使得分布式对象之间可以进行通信。(卷II中介绍)
1.2.4 健壮性
Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。
Java绝对是安全的,其原因是永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄露
1.2.5 安全性
Java一开始就设计成能够防范各种攻击,其中包括:
-
运行时堆栈溢出。如,蠕虫等病毒常用的攻击手段。
-
在自己的处理空间之外破坏内存。
-
未经授权读写文件。
数字签名类
1.2.6 体系结构中立
原始Pascal以及UCSD Pascal都使用了这种技术。
解释字节码比全速运行机器指令慢很多。虚拟机有一个选项,可以将使用最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。.NET平台也依赖于虚拟机。
虚拟机可以检测指令序列的行为。有的程序还可以快速地生成字节码,并动态地增强所运行程序的处理能力。
1.2.7 可移植性
Java规范中没有“依赖具体实现”的地方。
1.2.8 解释型
Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程,所以开发过程也变得更加快捷,更加具有探索性。
增量型链接有其优势,但给开发过程带来的好处显然是言过其实了。事实上,早期的Java开发工具的速度相当慢。现在,使用即时编译器将字节码翻译成机器码。
1.2.9 高性能
使用Java的头几年,许多用户不同意:性能就是“适用性更强”。然而,现在的即时编译器已经非常出色,以至于成了传统编译器的竞争对手,其原因是它们含有更多的可用信息。
消除函数调用(即“内嵌”)
1.2.10 多线程
只要操作系统支持,Java中的线程就可以利用多个处理器。在底层,主流平台的线程实现机制各不相同,Java把多线程的实现交给了底层的操作系统或线程库来完成。
1.2.11 动态性
Java与C和C++相比更加具有动态性。库中可以自由地添加新方法和实例变量,而对客户端没有任何影响。
1.3 Java applet与Internet
这里的想法很简单:用户从Internet下载Java字节码,并在自己的机器上运行。在网页中运行Java程序称为applet。 java源代码的许可证 不允许对语言和基本类库的结构做任何修改 虚拟机的安全机制
如今,浏览器的动态效果大多直接使用JavaScript或Flash。Java已经成为用来开发服务器端应用程序的最流行的语言
1.4 Java发展简史
1996年年初 Java1.0 没有打印功能
Java1.1 大大改进了反射能力,并为GUI编程增加了新的事件处理模型。
1998年 Java1.2版 又称Java 2 取代了早期玩具式的GUI,并且它的图形工具箱更加精细而具有可伸缩性,更加接近“一次编写,随处运行”的承诺。
Java1.5 即Java 5 这个版本添加了泛型类型(generic type)(类似于C++的模板)。另外还有几个受C#启发的很有用的语言特性:“for each”循环、自动装箱和元数据。
2006年 Java 6 没有改进语言方面,改进了性能,加强类库
2009年 Sun被Oracle收购。Java开发停滞了很长一段时间。
2011年Java 7 只做了一些很简单的改进
版本 | 年份 | 语言新特性 | 类与接口的数量 |
---|---|---|---|
1.0 | 1996 | 语言本身 | 211 |
1.1 | 1997 | 内部类 | 477 |
1.2 | 1998 | 无 | 1524 |
1.3 | 2000 | 无 | 1840 |
1.4 | 2002 | 断言 | 2723 |
5.0 | 2004 | 泛型类型、foreach循环、可变元参数、自动装箱、元数据、枚举、静态导入 | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | 基于字符串的switch,变形操作符,二进制字面量,异常处理改进 | 4024 |