1.1 Java 程序设计平台
Java 并不只是一种语言。在此之前出现的那么多种语言也没有能够引起那么大的轰动。Java 是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供诸如安全性、 跨操作系统的可移植性以及自动垃圾收集等服务的执行环境
有些语言提供了可移植性、
垃圾收集等
,
但是
,
没有提供一个大型的库
。
如果想要有奇特的绘
图功能
、
网络连接功能和数据库存取功能就必须自己动手编写代码
。
Java
具备所有这些特性
,
它是一种功能齐全的出色语言
,
是一个高质量的执行环境
,
还提供了一个庞大的库
。
正是因
为它集多种优势于一身
,
所以对广大的程序设计人员有着不可抗拒的吸引力
。
1.2 Java“ 白皮书” 的关键术语
1
)
简单性
2
)
面向对象
3
)
分布式
4
)
健壮性
5
)
安全性
7
)
可移植性
8
)
解释型
9
)
高性能
10
)
多线程
11
)
动态性
6
)
体系结构中立
1 . 2.1 简单性
Java
语法是
C
+
+
语法的一个
“
纯净
”
版本
。
这里没有头文件
、
指针运算
(
甚至指
针语法
、
)
结构
、
联合
、
操作符重载
、
虚基类等
(
请参阅本书各个章节给出的
C
+
+
注释
,
其
中比较详细地解释了
Java
与
C
+
+
之间的区别
)
。
然而
,
设计者并没有试图清除
C
+
+
中所有不
适当的特性
。
例如
,
switch
语句的语法在
Java
中就没有改变
。
如果你了解
C
+
+
就会发现可
以轻而易举地转换到
Java语法
1 . 2.2 面 向 对 象
开发
Java
时面向对象技术已经相当成熟
。
Java
的面向对象特性与
C
+
+
旗鼓相当
。
Java
与
C
++
的主要不同点在于多重继承
,
在
Java
中
,
取而代之的是更简单的接口概念
。
与
C
+
+
相比
,
Java
提供了更丰富的运行时自省功能
1 . 2.3 分布式
Java
有一个丰富的例程库
,
用于处理像
HTTP
和
FIT
之类的
TCP
/
IP
协议
。
Java
应用
程序能够通过
URL
打开和访问网络上的对象
,
其便捷程度就好像访问本地文件一样
。
如今
,
这一点已经得到认可
1 . 2.4 健壮性
Java
投入了大量的精力进行早期的问题检测、
后期动态的
(
运行时
)
检测
,
并消除了容易出
错的情况
… …
Java
和
C
+
+
最大的不同在于
Java
采用的指针模型可以消除重写内存
和损坏数据的可能性
。
1 . 2.5 安全性
Java
适用于网络
/
分布式环境
。
为了达到这个目标
,
在安全方面投入了很大精力。
使用
Java
可以构建防病毒
、
防篡改的系统。
从一开始,
Java
就设计成能够防范各种攻击
,
其中包括
:
•运行时堆栈溢出。
如蠕虫和病毒常用的攻击手段
。
•
破坏自己的进程空间之外的内存
。
•
未经授权读写文件
。
1 . 2.6 体系结构中立
编译器生成一个体系结构中立的目标文件格式
,
这是一种编译过的代码
,
只要有
Java
运行时系统
,
这些编译后的代码可以在许多处理器上运行
。
Java 编译器通过生成
与特定的计算机体系结构无关的字节码指令来实现这一特性
。
精心设计的字节码不仅
可以很容易地在任何机器上解释执行
,
而且还可以动态地翻译成本地机器代码
1.2.7 可移植性
1 . 2.8 解释型
Java
解释器可以在任何移植了解释器的机器上执行
Java
字节码
。
1 . 2.9 高性能
尽管对解释后的字节码性能已经比较满意
,
但在有些场合下还需要更加高效的
性能
。
字节码可以
(
在运行时刻
)
动态地翻译成对应运行这个应用的特定
CPU
的机
器码
。
1 . 2.1 0 多线程
多线程可以带来更好的交互响应和实时行为
。
1 . 2.1 1 动态性
从各种角度看
,
Java
与
C
或
C
+
+
相比更加具有动态性
。
它能够适应不断发展
的环境库中可以自由地添加新方法和实例变量
,
而对客户端却没有任何影响
。
在
Java
中找出运行时类型信息十分简单
。
1.4 Java 发展简史
Java
的历史要追溯到 1991
年
,
由
Patrick
Naughton
和
James
Gosling
(
一个全能的计算机
奇才
)
带领的
Sun
公司的工程师小组想要设计一种小型的计算机语言
,
主要用于像有线电视
转换盒这类的消费设备
。
另外
,
由于不同的厂商会选择不同的中央处理器
(
CPU
)
,
因此这种语言的关键是不与任何特定的体系结构捆绑在一起。
这个项目被命名为
“
Green
”
。代码短小、
紧凑且与平台无关
,
这些要求促使开发团队设计一个可移植的语言
,
可以为虚拟机生成中间代码。
Gosling
把这种语言称为
“
Oak
”
(
这么起名的原因大概是因为
他非常喜欢自己办公室外的橡树
)
。
Sun
公司的人后来发现
Oak
是一种已有的计算机语言的
名字
,
于是
,
将其改名为
Java
。
事实证明这是一个很有灵感的选择
。
1992
年
,
Green
项目发布了它的第一个产品
,
称之为
“
*
7
”
。
这个产品具有非常智能的
远程控制
。
遗憾的是
,
Sun
公司对生产这个产品并不感兴趣
,
Green
项目组的人员必须找出
其他的方法来将他们的技术推向市场
。
然而
,
没有一个标准消费品电子公司对此感兴趣
。
于
是
,
Green
项目组竞标了一个提供视频点播等新型服务的有线电视盒的项目
,
但没有成功
(
有
趣的是
,
得到这个项目的公司的领导恰恰是开创
Netscape
公司的
Jim
Clark
。
Netscape
公司后
来对
Java
的成功给予了很大的帮助
)
。
1996
年年初
,
Sun 发布了
Java
的第
1
个版本
:
人们很快地意识到
Java
1.0
不能用来进行
真正的应用开发
。
的确
,
可以使用
Java
1.0
来实现在画布上随机跳动的神经质的文本
applet
,
但它却没有提供打印功能
。
坦率地说
,
Java
1.0
的确没有为其黄金时期的到来做好准备
。
后
来的
Java
1
丨弥补了其中的大多明显的缺陷
.
,
大大改进了反射能力
,
并为
GUI
编程增加了新
的事件处理模型
:
不过它仍然具有很大的局限性
。
1998
年
JavaOne
会议的头号新闻是即将发布
Java
1.2
版
。
这个版本取代了早期玩具式的
GUI
,
并且它的图形
T
.
具箱更加精细而具有可伸缩性
,
更加接近
“
一次编写
,
随处运行
”
的
承诺
,
,
在
1998
年
12
月
Java
1.2
发布
7
天之后
,
Sun
公司市场部将其名称改为更加吸引人的
“
Java
2
标准版软件开发工具箱丨
.
2
版
”
。
除了
‘
标准版
’
之外
,
Sun
还推出了两个其他的版本
:
一个是用于手机等嵌人式设备的
‘
微
型版
”
;
另一个是用于服务器端处理的
“
企业版
”
。
本书主要讲述标准版
。
标准版的
1.3
和
1.4
版本对最初的
Java
2
版本做出了某些改进
, 扩展了标准类库
,
提高
系统性能
。
当然
,
还修正了一些
bug
。
在此期间
,
Java
applet
采用低调姿态
,
并淡化了客户
端的应用
,
但
Java
却成为服务器端应用的首选平台
。
5.0
版是自
1.1
版以来第一个对
Java
语言做出重大改进的版本
(
这一版本原来被命名为
1.5
版
,
在
2004
年的 JavaOne
会议之后
,
版本数字升至
5.0
)
。
经历了多年的研究
,
这个版本
添加了泛型类型
(
generic
type
)
(
类似于
C
+
+
的模板
,
)
其挑战性在于添加这一特性并没有对虚
拟机做出任何修改
。
另外
,
还有几个受
C
#
启发的很有用的语言特性
:
“
for
each
”
循环
、
自
动装箱和注解
。
版本
6
(
没有后缀
.
0
)
于
2006
年年末发布
。
同样
,
这个版本没有对语言方面再进行改进
。
但是
,
改进了其他性能
,
并增强了类库
。
随着数据中心越来越依赖于商业硬件而不是专用服务器
,
Sun
Microsystems
终于沦陷
,
于 2009
年被
Oracle
收购
_
Java
的开发停滞了很长一段时间
。
直到
201
丨年
Oracle
发布了
Java
的一个新版本
,
Java
?
,
其中只做了一些简单的改进
。
2014
年
,
Java
8
终于发布
,
在近
20
年中这个版本有了最大的改变
。