第
1 章
Java 的起源
对于计算机语言的发展史,业界一般认为
:
B语言导致了
C语言的诞生,
C语言演变出
了
C++语言,而
C++语言将让位于
Java语言。要想更好地了解Java语言,就必须了解它产生
的原因、推动它发展的动力,以及它对其他语
言的继承。像以前其他成功的
计算机语言一
样,
Java继承了其他语言的先进原理,同时又因其独特的环境要求而提出了一些创新性的
概念。在这本
书的其他各章
中,将从实用的角
度,对
Java语言、库及应用程序进行包括语
法在内的详细
介绍。在本章
里,我们将介绍
Java语言产生的背景
、发展过程,以及
使它变
得如此重要的原
因。
尽管
Java语言已和Internet的在线环境密不可分,但首先应该注意到的最重要一点是:
它是一种程序语
言。计算机语言
的革新和发展
需要
2个基本
因素的驱动:
·
适应正在变化的环境和需求
·
实现编程艺术的完善与提高
下面你将看到,
Java也正是在这两个因素的驱动下产生的。
1.1 Java
的由来
Jav
a
总是和
C++联系在一起,而C++则是从C语言派生而来的,所以Java
语言继承了这
两种语言的大部分特性。
Java的语法是从C继承的,Java许多面向对象的特性受到C++的影
响。
事实上,
Java中几个自定义的特性都来自于或可以追溯到它的前驱。而且,Java语言的
产生与过去
30年中计算机语言细致改进和不断
发展密切相关。基于这些原因
,本节将按顺
序回顾促使
Java产生的事件和推动力。正如你将看到的一样,每一次语言设计的革新都是
因为先前的语言
不能解决目前遇
到的基本问题
而引起。
Java也不例外。
1.1.1
现代的编程语言的诞生:C语言
C
语言的产生震撼了整个计算机界。它的影响不应该被低估,因为它从根本上改变了
编程的方法和思路。
C语言的产生是人们追求结构化、高效率、高级语言的直接结果,可
用它替代汇编语言开发系统程序。当设计一种
计算机语言时,经常要从以下
几方面进行权
衡:
第
1部分
Java语言
2
第 1 部分
Java
语言
·
易用性与功能
·
安全性和效率性
·
稳定性和可扩展性
C
语言出现以前,程序员们不得不经常在有优点但在某些方面又有欠缺的语言之间做
出选择。例如,尽管公认
FORTRAN在科学计算应用方面可以编写出相当高效的程序,但
它不适于编写系统程序。
BASIC虽然容易学习,但功能不够强大,并且谈不上结构化,这
使它应用到大程序的有效性受到怀疑。汇编语
言虽能写出高效率的程序,但
是学习或有效
地使用它却是不
容易的。而且,
调试汇编程序
也相当困难。
另一个复杂的问题是,早期设计的计算机语言(如
BASIC,COBOL,FORTRAN等)
没有考虑结构
化设计原则java自学的基础,
使用
GOTO语句作为对程序进行控制的一种主要方法。这样做
的结果是,用这些语言编写的程序往往成了“
意大利面条式的程序代码”,
一大堆混乱的
跳转语句和条件
分支语句使得程
序几乎不可能
被读懂。
Pascal虽然是结构化语言,但它的设
计效率比较低,而且缺少几个必需的特性,因
而无法在大的编程范围内使用
(特别是,给
定的
Pascal的标
准语言在特
定时间是可用的
,但将
Pascal作为系
统级编码是不
切实际的)。
因此,在
C语言产生以前
,没有任何一种语言
能完全满足人们的
需要,但人们对这
样
一种语言的需要却是迫切的。在
20世纪
70年代
初期,计算机革命开始了,对
软件的需求量
日益增加,使用早期的计算机语言进行软件开
发根本无法满足这种需要。学
术界付出很多
努力,尝试创造一种
更好的计算机语言
。但是,促使
C语言诞生
的另一个,也许是
最重要
的因素,是计算机硬件资源的富余带来了机遇
。计算机不再像以前那样被紧
锁在门里,程
序员们可以随意使用计算机,可以随意进行自
由尝试,因而也就有了可以开
发适合自己使
用的工具的机会
。所以,在
C语言诞生的前夕,计算机语言向前飞跃的时机已经成熟。
在
Dennis Ritchie第一个发明和实现在DEC PDP-11上运行UNIX操作系统时,一种更古
老的由
Martin Richards
设计的BCPL语言导致
了
C语言的产生。受
BCPL语言的影响,由Ken
Thompson
发明的B
语言,在20
世纪70
年代逐渐向C
语言发展演变。在此后的许多年里,由
Brian Kerni
ghan
和
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继承了这个
思想。
第 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
)新方法诞生了。面向对象的编程在这本书的后面详细讨论,但在这里给出一个简短
的定义:面向对象的编程是通过使用继承性、
封装性和多态性来帮助组织复
杂程序的编程
方法。
总之,尽管
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/I
SO
。
1.1.3 Java
出现的时机已经到来
在
20世纪
80年代
末和
90年代初,使
用面向对象编
程的
C++语言占主导地位。的
确,有
一段时间程序员
似乎都认为
已经找到了一种完美
的语言。因
为
C++有面
向对象的特征,又
有
C
语言高效和格式上的优点,因此它是一种可以被广泛应用的编程语言。然而,就像过
去一样,
推动计算机语
言进化的力量正
在酝酿。
在随后的几年里,万维网(WWW)和Internet
达到临界状态。
这个事件促成编
程的另一场革
命。
4
第 1 部分
Java
语言
1.2 Java
的产生
Jav
a
是由
James Gosling,Patrick Naughton,Chris Warth,Ed Frank和Mike Sheridan于1991
年在
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可能保持它有用、但默默无
闻的用于电子
消费品编程语
言的状态。然而,
随着万维网
的出现,
Java被推到计算机语言
设计的最前沿,
因为万维网也需
要可移植的程
序。
绝大多数程序员在涉足编程领域时就知道
可移植的程序像他们的理想一样难
以捉摸。
尽管人们对高效的、可移植的(独立于平台)
编程方式的追寻几乎和编程历
史一样久远,
但它总是让位于其他的更为紧迫的问题。此外,因为计算
机业被
Intel
,Macintosh和UNIX
这
3个竞争对手
垄断,
大多数程序员都
在其中的某个
领域内长期工作
,
所以对可移植语言
的
需求就不是那么迫切。但是,随着因特网和
Web的出现,关于可移植性语言的旧问题又被
提了出来。毕竟,因特网由不同的、分布式的
系统组成,其中包括各种类型
的计算机、操
作系统和
CPU。尽管许多类型的平台都可以与因特网连接,但用户仍希望他们能够运行同
样的程序。曾经
是一个令人烦恼
却无需优先考
虑的问题现在变
成了急需解决
的问题。
1993
年,
Java设计小组的成员发现他们在编制嵌入式控制器代码时经常遇到的可移植
性问题,在编制因特网代码的过程中也出现了
。事实上,开始被设计为解决
小范围问题的
Jav
a
语言同样可以被用在大范围的因特网上。这个认识使他们将Java的重心由电子消费品转
移到
Internet编程。
因此,
中立体系结构
编程语言的需
要是促使
Java诞生的源动力,而Internet
却最终导致了
Java的成功。
正如前面提到的,
Java的大部分特性是从C和C++中继承的。Java设计人员之所以故意
这么做,主要是
因为他们觉得,
在新语言中使
用熟悉的
C
语法及模仿C++面向
对象的特性,
将使他们的语
言对经验丰
富的
C/C++程序员有更大的吸引力。除了表面类似外,其他一些
促使
C和
C++成功的因素也帮了
Java的忙。首先,Java的设计、测试、精炼由真正从事编程
第 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对系统
编程的影响一
样:革命的力量
将改变世界。
1.3 Java
对Internet
为什么重要
Int
ern
et
使
Java成为网上最流行的编程语言,同时Java对Internet的影响也意义深远。原
因相当简单
:
Java扩展了可以在赛百空间自由流动的对象的世界。在网络中,有两大类对
象在服务器和个人计算机之间传输:被动的信
息和动态的、主动的程序。例
如,当你阅读
电子邮件时,你在看被动的数据。甚至当你下
载一个程序时,该程序的代码
也是被动的数
据,直到你执行它为止。但是,可以传输到个
人计算机的另一类对象却是:
动态的、可自
运行的程序,虽然这类程序是客户机上的活动
代理,但却是由服务器来初始
化的。例如,
被服务器用来正
确地显示服务器
传送数据的程
序。
网上程序在动态性上是令人满意的,但它
们在安全性和可移植性方面也显示
出严重的
缺陷。
在
Java产生以前,当前赛百空间有一半的对象实体无法进入网络世界,是Java为它们
打开了便利之门
,而且在这个过
程中定义了一
种全新的程序形
式:
applet(小应用程序)。
1.3.1 Java
小应用程序和应用程序
Jav
a
可用来生成两类程序:应用程序(applications)和Java applet(小应用程序)。应
用程序是可以
在你的计算机
的操作系统中运行
的程序,从
这一方面来说,用
Java
编制的应
用程序多多少少
与使用
C或
C++编制的应用程序有些类似。在创建应用程序时,Java与其他
计算机语言没
有大的区别。
而
Java的重要性就在于它具有编制小应用程序的功能。小应用
程序是可以在
Internet中传输并在兼容
Java的Web浏览器中运行的应用程序。小应用程序实
际上就是小型
的
Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/3462.html