www.plcworld.cn
第1部分
Java语言
第
1
章
Java
的起源
www.91HMI.com
对于计算机语言的发展史,业界一般认为:B语言导致了C语言的诞生,C语言演变出
了C++语言,而C++语言将让½于Java语言。要想更½地了解Java语言,就必须了解它产生
的原因、推动它发展的动力,以及它对其他语言的继承。像以前其他成功的计算机语言一
样,Java继承了其他语言的先进原理,同时又因其独特的环境要求而提出了一些创新性的
概念。在这本书的其他各章中,将从实用的角度,对Java语言、库及应用程序进行包括语
法在内的详细介绍。在本章里,我们将介绍Java语言产生的背景、发展过程,以及½它变
得如此重要的原因。
½管Java语言已和Internet的在线环境密不可分,½首先应该注意到的最重要一点是:
它是一种程序语言。计算机语言的革新和发展需要2个基本因素的驱动:
www.PLCworld.cn
・ 适应正在变化的环境和需求
・ 实现编程艺术的完善与提高
下面½将看到,Java也正是在这两个因素的驱动下产生的。
www.91HMI.com
or
ld
.c
n
w
w
.P
LC
1.1
Java的由来
w
Java总是和C++联系在一起,而C++则是从C语言派生而来的,所以Java语言继承了这
两种语言的大部分特性。Java的语法是从C继承的,Java许多面向对象的特性受到C++的½
响。事实上,Java中几个自定义的特性½来自于或可以½溯到它的前驱。而且,Java语言的
产生与过去30年中计算机语言细致改进和不断发展密切相关。基于这些原因,本节将按顺
序回顾促½Java产生的事件和推动力。正如½将看到的一样,每一次语言设计的革新½是
因为先前的语言不½解决目前遇到的基本问题而引起。Java也不例外。
1.1.1
现代的编程语言的诞生:C语言
C语言的产生震撼了整个计算机界。它的½响不应该被½估,因为它从根本上改变了
编程的方法和思路。C语言的产生是人们½求结构化、高效率、高级语言的直接结果,可
用它替代汇编语言开发系统程序。½设计一种计算机语言时,经常要从以下几方面进行权
衡:
w
www.91HMI.com
www.plcworld.cn
2
第
1
部分
Java
语言
・ 易用性与功½
・ 安全性和效率性
・ 稳定性和可扩展性
C语言出现以前,程序员们不得不经常在有优点½在某些方面又有欠缺的语言之间做
出选择。例如,½管公认FORTRAN在科学计算应用方面可以编写出相½高效的程序,½
它不适于编写系统程序。BASIC½然容易学习,½功½不够强大,并且谈不上结构化,这
½它应用到大程序的有效性受到怀疑。汇编语言½½写出高效率的程序,½是学习或有效
地½用它却是不容易的。而且,调试汇编程序也相½困难。
另一个复杂的问题是,早期设计的计算机语言(如BASIC,COBOL,FORTRAN等)
没有考虑结构化设计原则,½用GOTO语句½为对程序进行控制的一种主要方法。这样做
的结果是,用这些语言编写的程序往往成了“意大利面条式的程序代码”,一大堆混乱的
跳½语句和条件分支语句½得程序几乎不可½被读懂。
Pascal½然是结构化语言,
½它的设
计效率比较½,而且缺少几个必需的特性,因而无法在大的编程范围内½用(特别是,给
定的Pascal的标准语言在特定时间是可用的,½将Pascal½为系统级编码是不切实际的)。
因此,在C语言产生以前,没有任½一种语言½完全满足人们的需要,½人们对这样
一种语言的需要却是迫切的。在20世纪70年代初期,计算机革½开始了,对½件的需求量
日益增加,½用早期的计算机语言进行½件开发根本无法满足这种需要。学术界付出很多
努力,尝试创造一种更½的计算机语言。½是,促½C语言诞生的另一个,也许是最重要
www.PLCworld.cn
的因素,是计算机硬件资源的富½带来了机遇。计算机不再像以前那样被紧锁在门里,程
www.91HMI.com
www.91HMI.com
序员们可以随意½用计算机,可以随意进行自由尝试,因而也就有了可以开发适合自己½
用的工具的机会。所以,在C语言诞生的前夕,计算机语言向前飞跃的时机已经成熟。
在Dennis
Ritchie第一个发明和实现在DEC PDP-11上运行UNIX操½系统时,一种更古
老的由Martin
Richards设计的BCPL语言导致了C语言的产生。受BCPL语言的½响,由Ken
Thompson发明的B语言,在20世纪70年代逐渐向C语言发展演变。在此后的许多年里,由
Brian Kernighan和Dennis Ritchie编写的
《The
C Programming Language》
(Prentice-Hall,
1978)
被认为是事实上的C语言标准,该书认为C只是支持UNIX 操½系统的一种语言。1989年12
月,美½½家标准化组织(
ANSI )制定了C语言的标准,C语言被正式标准化。
许多人认为C语言的产生标志着现代计算机语言时代的开始。它成功地综合处理了长
期困扰早期语言的矛盾属性。C语言是功½强大、高效的结构化语言,简单易学,而且它
还包括一个无½的方面:它是程序员自己的语言。在C语言出现以前,计算机语言要么被
½为学术实验而设计,要么由官僚委员会设计。而C语言不同。它的设计、实现、开发由
真正的从事编程工½的程序员来完成,反映了现实编程工½的方法。它的特性经由实际运
用该语言的人们不断去提炼、测试、思考、再思考,½得C语言成为程序员们喜欢½用的
语言。确实,C语言迅速吸引了许多狂热的½随者,因而很快受到许多程序员的青睐。简
言之,C语言是由程序员设计并由他们½用的一种语言。正如½将看到的,Java继承了这个
思想。
w
w
w
.P
LC
w
or
ld
.c
n
www.91HMI.com
www.plcworld.cn
第
1
章
Java
的起源
3
1.1.2
对C++的需要
在20世纪70年代末和80年代初,C成为了主流的计算机编程语言,至今仍被广泛½用。
½也许会问,既然C是一种成功且有用的语言,为什么还需要新的计算机语言?答案是复
杂性(complexity)。程序越来越复杂这一事实贯穿编程语言的历史。C++正是适应了这一
需求。下面介绍为什么对程序复杂性的更½管理是C++产生的基本条件。
自从计算机发明以来,编程方法经历了戏剧性的变化。例如,½计算机刚发明出来时,
编程是通过面板触发器用人工打孔的办法输入二进制机器指令来实现的。对于只有几百行
的程序,这种办法是可行的。随着程序不断增大,人们发明了汇编语言,它通过½用符号
来代替机器指令,这样程序员就½处理更大、更复杂的程序。随着程序的进一步增大,高
级语言产生了,它给程序员提供了更多的工具来处理复杂性问题。
第一个被广泛½用的高级语言½然是FORTRAN。
½管FORTRAN最初给人留下了深刻
的印象,½它无法开发出条理清楚易于理解的程序。20世纪60年代提出了结构化编程方法。
这种结构化的编程思想被像C这样的语言所应用,第一次½程序员可以相对½松地编写适
度复杂的程序。然而,½一个工程项目达到一定规模后,即½½用结构化编程方法,编程
人员也无法对它的复杂性进行有效管理。20世纪80年代初期,许多工程项目的复杂性½超
过了结构化方法的极限。为解决这个问题,面向对象编程(object-oriented
programming,
OOP)新方法诞生了。面向对象的编程在这本书的后面详细讨论,½在这里给出一个简短
的定义:面向对象的编程是通过½用继承性、封装性和多态性来帮助组织复杂程序的编程
www.PLCworld.cn
方法。
www.91HMI.com
www.91HMI.com
总之,½管C是世界上伟大的编程语言之一,½它处理复杂性的½力有限。一旦一个
程序的代码超过25
000~100 000行,就很难从总½上把握它的复杂性了。C++突破了这个限
制,帮助程序员理解并且管理更大的程序。
1979年,½Bjarne Stroustrup在新½西州的Murray Hill实验室工½时,发明了C++。
Stroustrup
最初把这种新语言称为“带类的C”。1983年,改名为C++。C++通过增加面向
对象的特性扩充了C。因为C++产生在C的基础之上,因此它包括了C所有的特征、属性和
优点。
这是C++½为语言成功的一个关键原因。
C++的发明不是企图创造一种全新的编程语
言,而是对一个已经高度成功的语言的改进。C++在1997年11月被标准化,目前的标准是
ANSI/ISO。
w
w
w
.P
LC
w
or
ld
.c
n
1.1.3 Java出现的时机已经到来
在20世纪80年代末和90年代初,½用面向对象编程的C++语言占主导地½。的确,有
一段时间程序员似乎½认为已经找到了一种完美的语言。因为C++有面向对象的特征,又
有C语言高效和格式上的优点,因此它是一种可以被广泛应用的编程语言。然而,就像过
去一样,
推动计算机语言进化的力量正在酝酿。
在随后的几年里,
万维½
(WWW)
和Internet
达到临界状态。这个事件促成编程的另一场革½。
www.91HMI.com
www.plcworld.cn
4
第
1
部分
Java
语言
1.2
Java的产生
Java是由James Gosling,
Patrick Naughton,
Chris Warth, Frank和Mike Sheridan于1991
Ed
年在Sun
Microsystems公司设计出来的。开发第一个版本花了18个月。该语言开始名叫
“Oak”,于1995年更名为“Java”。从1992 的秋天Oak问世到1995的春天公开发布Java
语言,许多人对Java的设计和改进做出了贡献。Bill
Joy,Arthur van Hoff,Jonathan Payne,
Frank Yellin和Tim Lindholm是主要的贡献者,正是他们的贡献½最初原型得以成熟。
说起来多少有些令人吃惊,Java的最初推动力并不是因特½!而是源于对独立于平台
(也就是½系结构中立)语言的需要,这种语言可创建½够嵌入微波炉、遥控器等各种家
用电器设备的½件。用½控制器的CPU芯片是多种多样的,½C和C++以及其他绝大多数语
言的缺点是只½对特定目标进行编译。½管为任½类型的CPU芯片编译C++程序是可½的,
½这样做需要一个完整的以该CPU为目标的C++编译器,而创建编译器是一项既耗资巨大
又耗时较长的工½。
因此需要一种简单且经济的解决方案。
为了找到这样一种方案,
Gosling
和其他人开始一起致力于开发一种可移植、跨平台的语言,该语言½够生成运行于不同环
境、不同CPU芯片上的代码。他们的努力最终促成了Java的诞生。
在Java的一些细节被设计出来的同时,第二个并且也是最重要的因素出现了,该因素
将对Java的未来起着至关重要的½用。这第二个因素½然就是万维½(WWW)。如果万维
½(WWW)的成型和Java的实现不是同时发生的话,那么Java可½保持它有用、½默默无
www.PLCworld.cn
www.91HMI.com
www.91HMI.com
闻的用于电子消费品编程语言的状态。然而,随着万维½的出现,Java被推到计算机语言
设计的最前沿,因为万维½也需要可移植的程序。
绝大多数程序员在涉足编程领域时就知道可移植的程序像他们的理想一样难以捉摸。
½管人们对高效的、可移植的(独立于平台)编程方式的½寻几乎和编程历史一样久远,
½它总是让½于其他的更为紧迫的问题。此外,因为计算机业被Intel,Macintosh和UNIX
这3个竞争对手垄断,大多数程序员½在其中的某个领域内长期工½,所以对可移植语言的
需求就不是那么迫切。½是,随着因特½和Web的出现,关于可移植性语言的旧问题又被
提了出来。毕竟,因特½由不同的、分布式的系统组成,其中包括各种类型的计算机、操
½系统和CPU。½管许多类型的平台½可以与因特½连接,½用户仍希望他们½够运行同
样的程序。曾经是一个令人烦恼却无需优先考虑的问题现在变成了急需解决的问题。
1993年,Java设计小组的成员发现他们在编制嵌入式控制器代码时经常遇到的可移植
性问题,在编制因特½代码的过程中也出现了。事实上,开始被设计为解决小范围问题的
Java语言同样可以被用在大范围的因特½上。
这个认识½他们将Java的重心由电子消费品½
移到Internet编程。
因此,
中立½系结构编程语言的需要是促½Java诞生的源动力,
而Internet
却最终导致了Java的成功。
正如前面提到的,Java的大部分特性是从C和C++中继承的。Java设计人员之所以故意
这么做,主要是因为他们觉得,在新语言中½用熟悉的C语法及模仿C++面向对象的特性,
将½他们的语言对经验丰富的C/C++程序员有更大的吸引力。除了表面类似外,其他一些
促½C和C++成功的因素也帮了Java的忙。首先,Java的设计、测试、精炼由真正从事编程
w
w
w
.P
LC
w
or
ld
.c
n
www.91HMI.com
www.plcworld.cn
第
1
章
Java
的起源
5
工½的人员完成,它根植于设计它的人员的需要和经验,因而也是一个程序员自己的语言。
其次,Java是紧密结合的且逻辑上是协调一致的。最后,除了那些Internet环境强加的约束
以外,Java给了编程人员完全的控制权。如果½程序编的½,½编写的程序就½反映出这
一点。相反,如果½的编程手法拙劣,也½在½的程序中反映出来。换一种说法,Java并
不是训练新手的语言,而是供专业编程人员½用的语言。
由于Java和C++之间的相似性,容易½人将Java简单地想象为“C++的版本”。½其实
这是一种误解。Java在实践和理论上½与C++有重要的不同点。½管Java受到C++的½响,
½它并不是C++的增强版。例如,Java与C++既不向上兼容,也不向下兼容。½然,Java与
C++的相似之处也是很多的,如果½是一个C++程序员,½会感觉到对Java非常熟悉。另外
一点是:Java并不是用来取代C++的,设计Java是为了解决某些特定的问题,而设计C++是
为了解决另外一类完全不同的问题。两者将长时间共存。
正如本章开始提到的,计算机语言的革新靠两个因素驱动:对计算环境改变的适应和
编程艺术的进步。环境的变化促½Java这种独立于平台的语言注定成为Internet上的分布式
编程语言。同时,Java也改变了人们的编程方式,特别是Java对C++½用的面向对象范例进
行的增强和完善。所以,Java不是孤立存在的一种语言,而是计算机语言多年来的演变结
果。仅这个事实就足以证明Java在计算机语言历史上的地½。Java对Internet编程的½响就
如同C对系统编程的½响一样:革½的力量将改变世界。
www.91HMI.com
1.3
Java对Internet为什么重要
www.PLCworld.cn
www.91HMI.com
Internet½Java成为½上最流行的编程语言,同时Java对Internet的½响也意义深远。原
因相½简单:Java扩展了可以在赛百空间自由流动的对象的世界。在½络中,有两大类对
象在服务器和个人计算机之间传输:被动的信息和动态的、主动的程序。例如,½½阅读
电子邮件时,½在看被动的数据。甚至½½下½½一个程序时,该程序的代码也是被动的数
据,直到½执行它为止。½是,可以传输到个人计算机的另一类对象却是:动态的、可自
运行的程序,½然这类程序是客户机上的活动代理,½却是由服务器来初始化的。例如,
被服务器用来正确地显示服务器传送数据的程序。
½上程序在动态性上是令人满意的,½它们在安全性和可移植性方面也显示出严重的
缺陷。在Java产生以前,½前赛百空间有一半的对象实½无法进入½络世界,是Java为它们
打开了便利之门,而且在这个过程中定义了一种全新的程序½式:applet(小应用程序)。
1.3.1 Java小应用程序和应用程序
Java可用来生成两类程序:应用程序(applications)和Java applet(小应用程序)。应
用程序是可以在½的计算机的操½系统中运行的程序,从这一方面来说,用Java编制的应
用程序多多少少与½用C或C++编制的应用程序有些类似。在创建应用程序时,Java与其他
计算机语言没有大的区别。而Java的重要性就在于它具有编制小应用程序的功½。小应用
程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。小应用程序实
际上就是小型的Java程序,½像图像文件、声音文件和视频片段那样通过½络动态下½½,
w
w
w
.P
LC
w
or
ld
.c
n
www.91HMI.com
评论