Transcript JAVA简史

深圳市计算机行业协会

2005年6月23日
JAVA简史

Sun的公司,Patrick Haughton和James Gosling
(一个全能的计算机奇才)带领着Sun的一个
工程师小组,着手设计能够用于像有限电视转
换盒一类的消费设备的小型计算机语言。由于
这些设备没有很强的处理能力和太多内存,所
以这个语言必须非常小并能够生成非常紧凑的
代码。另外,因为不同的厂商可能选折不同的
CUP,所以这个语言不能够限定在一个单一的
体系结构下。这个项目的名称是“Green”.
JAVA简史

对代码短小,紧凑,与平台无关的要求
使得开发团队找出了很早以前的一个模
型。一些Pascal实现曾经在早期PC上试过
这个模型,以Pascal的发明者Nucleus
Wirth为先驱,而UCSD Pascal对此做的商
业实现是要设计一种能够为假想机器生
成中间代码的可移植的语言(假想机器
被称为虚拟机,Java虚拟机(JVM)也由
此而来)。
JAVA简史

对代码短小,紧凑,与平台无关的要求使得
开发团队找出了很早以前的一个模型。一些
Pascal实现曾经在早期PC上试过这个模型,
以Pascal的发明者Nucleus Wirth为先驱,而
UCSD Pascal对此做的商业实现是要设计一
种能够为假想机器生成中间代码的可移植的
语言(假想机器被称为虚拟机,Java虚拟机
(JVM)也由此而来)。
JAVA简史

不过,Sun的开发人员大都具有深厚的Unix背
景,因此他们的语言基于C++,而非Pascal。尤
其是,他们把语言设计成面向对象的,而不是
面向过程的。但正如Gosling在采访中说:“毕
竟,语言只是工具,而非目标。” Gosling把
他的语言称为“Oak”.Sun的人后来才发现Oak
已经是一门存在着的计算机语言的名字,于是
他们又把名字改成了“Java”.与爪哇的名字相
同。1995年5月23日,Java出现在Sun系统公司
的年度SunWorld会议中,作为公司20项公布项
目中的第12项。
JAVA简史

1997年,Sun公司因为Java的一些不兼容性
而起诉Microsoft公司,喀拉喀托火山也开始
活跃起来(从此爪哇岛每年要发生大约十次
火山爆发,也许这只是一种巧合吧)。随着
官司越打越大,岛上居民的生活也越来越
难过了,雅加达的经济危机,造成苏哈托
总统下台,东帝汶提出要求政治自由。Sun
Java也发生了同样激烈的血战,最终于2001
年判决Microsoft公司受罚两千万美元。
JAVA简史

下面讲讲Java平台。1995年的Java只是个编程
语言,如今则已成为一个平台。Sun在1996年
早期发部了Java第一版。人们很快认识到Java
1.0并不适合做真正的应用开发。的确,你可以
使用Java 1.0生成在画布上随便游动文本的
applet。但是你甚至无法用Java 1.0进行打印。
Java1.0显然太过稚嫩,对黄金时期的到来还无
准备。它的后继者,Java1.1填补了最明显的空
缺,极大地提高了反射能力并为GUI编程增加
了新的事件模型。
JAVA简史

1998年JavaOne会议的最大新闻是 Java 1.2版的
即将发布,该版本用老练的,可伸缩的版本取
代了早期版本中玩具样的GUI和图形工具箱,
从而比其先前版本更接近“一次编写,到处运
行”的承诺。1998年12月Java1.2 版本发布的3
天后,Sun的市场部门把名字改为更响亮的
“Java 2标准版软件开发工具箱1.2版”。随后
出现的1.3版,1.4版都是在最初的Java 2版本基
础上的增量改进,增加了一些新特性,提升了
性能,当然也修正了一些bug
Java标准版API的发展
版本
类和接口的数目 方法和字段数目
1.0
212
2125
1.1
504
5478
1.2
1781
20935
1.3
2130
23901
1.4
3020(135个包)
32138
1.5(5.0)
4000以上(166个包)
JAVA的优点

Java的一个显著优点就是运行时环境提供了平台
无关性:你可以在Windows,Solaris,Linux或者其
他操作系统上使用完全一样的代码。这点对于在
各种不同平台上运行从Internet上下载的程序来说
很有必要。
JAVA的优点

Java的另个优点在于它具有和C++类似的
语法。这使得C和C++程序员可以很容易
地学习Java。
 Java还是完全面向对象的------甚至比C++
还要面向对象。除了数字之类的几个基
本类型,Java中的一切都是对象。
JAVA的优点
然而,Java绝不仅仅是某种经过改善的
C++方言。很关键的一点在于:用Java开
发没有bug的代码比用C++要简单的多。
 原因何在呢??Java的设计者仔细研究了
是什么使得C++代码这么容易出现bug。
他们为Java增加了一些特性,来消除出现
常见bug的可能性:

JAVA的优点

1,Java设计者取消了手工内存分配和回
收。在Java中,内存是自动进行垃圾收集
的。你永远不必担心会出现内存崩溃的
现象。
 2,他们引用了真正的数组而且取消了指
针算法。你永远不必担心由于指针操作
时出现的偏移错误而重写内存区域。
JAVA的优点

3,他们消除了在条件性语句中弄混赋值
和相等测试的可能性。比如,你根本不
能编译通过if(n=3)…这样的语句。
(VB,PB程序员可能注意不到这种问题,
但是请相信,在C/C++代码中,这种语句
是导致常见的错误根源。)
JAVA的优点

4,他们消除了多重继承,替换为“接口”
(interface)。接口能够实现多重继承的
大部分功能,却没有管理多重继承层次
关系带来的复杂性。
JAVA技术特点
简单性
在一次C++会议上,Sun公司创始人之一
Bill Joy(现为首席科学家)指出,“C++太
复杂,我要的是C++ ++ -- ”。Java正是满
足了这个要求。Java加进了自动内存回收
之类的新任务(++),减去了C++中费
解而不常用的方面,如运算符重载(--)。
JAVA技术特点
简单性

Java简单性的另一个方面是Java中没有任
何真正的新东西。如果你看看Java特性集
和计算历史,则可以发现,一切都是借
用现成的东西。
JAVA技术特点
简单性

1,类来自C++和Smalltalk,但Java只限
于单实现继承。
 2,接口来自Objective-C,向Java提供多接
口继承。
 3,包来自Modula,在Java中增加了层次
试名字空间和逻辑开发单元。
 4,并发性来自Mesa,Java内置多线程支持。
JAVA技术特点
简单性

5,异常处理来自Modula-3,在Java方法中
增加了抛出异常的声明。
 6,动态链接与内存回收来自Lisp,Java可
以在需要时装入类,不需要时将其释放。
随着新特性不断加进Java中,这些特性也
是从摸索与实践中来的。例如:在Java
1.5中增加参数化类型的支持。
JAVA技术特点
面向对象

简单来说,面向对象设计是一种把重点
放在数据(等于对象)和对象接口的编
程技术。用问题空间中的元素与对象描
述问题,而不是用计算机中执行的一系
列步骤来描述。这样,好的设计就能得
到可复用,可扩展和可维护的组件。这
些组件相当灵活,可以处理环境的改变,
因为这些对象的主要工作就是相互之间
来回发送消息。
JAVA技术特点
面向对象

实际上,Java APIs是这些预建组件的集
合,称为类库。Java中不需要一切从头开
始,也可以从标准库开始。这些标准库
随着时间推移不断改变,每个新版本推
出更多预建组件。
JAVA技术特点
分布式

从1982年成立时起,Sun公司的思想一直
是“网络就是计算机”,Java编程语言要
求支持网络和像本地对象一样方便地访
问分布式对象。这个目标一开始就已经
提出,但Java的功能是不断改变的。
JAVA技术特点
分布式
最初,Java只能通过HTTP之类的标准TCP/IP
协议访问分布式对象。而利用最新版的Java
平台,则可以通过CORBA(Common Object
Request Broker Architecture)与RMI(Remote
Method Invocation)等协议和最近增加的Web
Services像访问同一执行空间的方法一样方便
而直接地调用远程机器上的方法。对每个协
议,系统自动处理所有转换与传输。
JAVA技术特点
解释性
Java程序是解释性的,不是编译成自然执
行码,而是转换成平台中立的字节码。
这些字节码可以传输到任何具有Java运行
环境(JRE,Java Runtime Environment)
的平台,其中包括Java虚拟机(JVM,Java
Virtual Machine),从而在执行时不需要重
新编译或重新链接。
JAVA技术特点
解释性
也许你以为这个过程会使速度很慢,但
稍后“高性能”一节将会介绍,情况并
非如此。平台中立字节码实际上还包含
其他信息,可以在运行时根据编译时无
法进行的决策进行执行优化。
JAVA技术特点
健壮性
健壮性反映程序的可靠性。Java的几个
内置特性使程序的可靠性得到改进:
1,Java是强类型的语言。编译器和类装
入器保证所有方法调用的正确性,防止
隐式类型失配和版本不兼容性。
JAVA技术特点
健壮性
2,Java没有指针,不能引用内存指针,搞乱内存
或越过数组边界。Java用引用而不用指针,不
能通过删除引用直接操纵内存空间。
3,Java进行自动内存回收,编程人员无法意外
忘记释放内存,不需要判断何处需要释放内存。
4,Java鼓励用接口而不用类。接口定义一组行
为,而类实现这些行为。我们传递的是接口而
不是类,从而隐藏这些实现细节
JAVA技术特点
安全性
Java被设计为用于网络/分布式环境。为
了达到这个目标,在安全方面投入了很
大精力。用Java可以构建防病毒和防篡改
的系统。
Java安全机制禁止Java程序进行一些操作。
下面列出被限制的一些操作:
JAVA技术特点
安全性
1,禁止运行时堆栈溢出,如臭名昭著的
Internet蠕虫所做的那样。
2,禁止在自己的处理空间外破坏内存。
3,禁止通过安全控制类转载器来读写本地文件,
就像Web浏览器禁止此类访问。
JAVA技术特点
体系结构中立

体系结构中立性指Java的平台中立字节码。
Java程序不是编译成平台特定的二进制码,而
是可以在任何地方执行,不需要重新编译与链
接。如果公司开发新硬件,则不必放弃原有的
软件投资,而只要在新平台中放上Java运行环
境。如果新公司开发全新的硬件与操作系统,
则不必从没有软件的产品上从零开始,只要放
上Java运行环境,新设计的平台就可以运行所
有现有Java程序。
JAVA技术特点
可移植性

Java的格言是一次编写,到处运行
(WORA,Write Once, Run Anywhere)。
Java的目标是在任何体系结构中运行同一
个程序。这种可移植性不仅利用了平台
中立字节码,而且在Java Language
Specification中定义了所有数字表示的长
度,字节顺序和操纵,而不是利用实现
特定细节(如 int 多大)。
JAVA技术特点
高性能
也许你认为“解释性”与“高性能”是个
矛盾,但平台中立字节码可以在运行时转换成
CPU特定机器码,和自然编译C/C++代码以同
样的速度执行。Java带有两个运行转换工具,
可以自动完成这个工作:第一代工具是即时
(JIT,Just-In-Time)编译器;第二代工具是
HotSpot。实际上,HotSpot和JIT编译器的作用
是相同的;运行时转换成自然指令集。但是,
HotSpot还监视代码执行,对经常执行的块进行
速度优化,而不是盲目优化。
JAVA技术特点
多线程
可以把线程看成执行情景。例如,联机浏览
时,浏览器在后台下载图形的同时显示新的
Web页面,每个任务可以在不同线程中执行,
程序同时运行多个任务或线程时,成为多线
程。
多线程程序共享内存,要在线程之间进行通
信。Java编程语言和标准库中有许多功能,
可以帮助进行通信,保证线程安全性。
JAVA技术特点
动态性

Java 还是个动态语言,这里指的是库。具体地
说,库可以不断改变,而程序不需要重新链接。
Sun公司发布新Java版本或其他公司发布新的第
三方库之后,库中增加了新内容,但早期的平
台中立字节码仍然可以工作。只要库中使用的
部分没有删除,程序就可以使用,即使库中增
加了新内容。前面曾介绍过,Java优先采用接
口而不是类,从而也保证了这种动态性。
谢谢大家