1、Java的起源,对于计算机语言的发展史,业界一般认为:B语言导致了C语言的诞生,C语言演变出了C+语言,而C+语言将让位于Java语言。要想更好地了解Java语言,就必须了解它产生的原因、推动它发展的动力,以及它对其他语言的继承。计算机语言的革新和发展需要2个基本因素的驱动:适应正在变化的环境和需求 实现编程艺术的完善与提高Java也正是在这两个因素的驱动下产生的。,Java的由来Java总是和C+联系在一起,而C+则是从C语言派生而来的,所以Java语言继承了这两种语言的大部分特性。每一次语言设计的革新都是因为先前的语言不能解决目前遇到的基本问题而引起。Java也不例外。现代的编程语言的诞生
2、:C语言C语言的产生震撼了整个计算机界。它从根本上改变了编程的方法和思路当设计一种计算机语言时,经常要从以下几方面进行权衡: 易用性与功能 安全性和效率性 稳定性和可扩展性,C语言出现以前,程序员们不得不经常在有优点但在某些方面又有欠缺的语言之间做出选择。例如,BASIC虽然容易学习,但功能不够强大,并且谈不上结构化,这使它应用到大程序的有效性受到怀疑。汇编语言虽能写出高效率的程序,但是学习或有效地使用它却是不容易的。而且,调试汇编程序也相当困难。因此,在C语言产生以前,没有任何一种语言能完全满足人们的需要,但人们对这样一种语言的需要却是迫切的。,由Brian Kernighan和Dennis
3、 Ritchie编写的The C Programming Language(Prentice-Hall,1978)被认为是事实上的C语言标准,该书认为C只是支持UNIX 操作系统的一种语言。1989年12月,美国国家标准化组织( ANSI )制定了C语言的标准,C语言被正式标准化。许多人认为C语言的产生标志着现代计算机语言时代的开始。它成功地综合处理了长期困扰早期语言的矛盾属性。C语言是功能强大、高效的结构化语言,简单易学,而且它还包括一个无形的方面:它是程序员自己的语言。正如你将看到的,Java继承了这个思想。,对C+的需要在20世纪70年代末和80年代初,C成为了主流的计算机编程语言,至今
4、仍被广泛使用。你也许会问,既然C是一种成功且有用的语言,为什么还需要新的计算机语言?答案是复杂性(complexity)。程序越来越复杂这一事实贯穿编程语言的历史。C+正是适应了这一需求。20世纪60年代提出了结构化编程方法。当一个工程项目达到一定规模后,即使使用结构化编程方法,编程人员也无法对它的复杂性进行有效管理。20世纪80年代初期,许多工程项目的复杂性都超过了结构化方法的极限。为解决这个问题,面向对象编程(object-oriented programming,OOP)新方法诞生了。,1979年,当Bjarne Stroustrup在新泽西州的Murray Hill实验室工作时,发明了
5、C+。C+的发明不是企图创造一种全新的编程语言,而是对一个已经高度成功的语言的改进。C+在1997年11月被标准化,目前的标准是ANSI/ISO。Java出现的时机已经到来在20世纪80年代末和90年代初,使用面向对象编程的C+语言占主导地位。的确,有一段时间程序员似乎都认为已经找到了一种完美的语言。在随后的几年里,万维网(WWW)和Internet达到临界状态。这个事件促成编程的另一场革命。,Java的产生Java是由James Gosling,Patrick Naughton,Chris Warth,Ed Frank和Mike Sheridan于1991年在Sun Microsystems
6、公司设计出来的。该语言开始名叫“Oak”,于1995年更名为“Java”。Java最初推动力并不是因特网!而是源于对独立于平台语言的需要,这种语言可创建能够嵌入微波炉、遥控器等各种家用电器设备的软件。用作控制器的CPU芯片是多种多样的,但C和C+以及其他绝大多数语言的缺点是只能对特定目标进行编译。尽管为任何类型的CPU芯片编译C+程序是可能的,但这样做需要一个完整的以该CPU为目标的C+编译器,而创建编译器是一项既耗资巨大又耗时较长的工作。因此需要一种简单且经济的解决方案。,在Java的一些细节被设计出来同时,第二个并且也是最重要的因素出现了。这第二个因素当然就是万维网(WWW)。因为万维网也
7、需要可移植的程序。毕竟,因特网由不同的、分布式的系统组成,其中包括各种类型的计算机、操作系统和CPU。尽管许多类型的平台都可以与因特网连接,但用户仍希望他们能够运行同样的程序。曾经是一个令人烦恼却无需优先考虑的问题现在变成了急需解决的问题。,中立体系结构编程语言的需要是促使Java诞生的源动力,而Internet却最终导致了Java的成功。Java的大部分特性是从C和C+中继承的。也是一个程序员自己的语言。其次,Java给了编程人员完全的控制权。换一种说法,Java并不是训练新手的语言,而是供专业编程人员使用的语言。,尽管Java受到C+的影响,但它并不是C+的增强版。另外一点是:Java并不
8、是用来取代C+的,设计Java是为了解决某些特定的问题,而设计C+是为了解决另外一类完全不同的问题。两者将长时间共存。,Java的魔力:字节码Java解决上述两个问题安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集,该Java运行时系统称为Java虚拟机(JavaVirtual Machine,JVM)。在其标准形式下,JVM 就是一个字节码解释器。将一个Java程序翻译成字节码,有助于它更容易地在一个大范围的环境下运行程序。原因非常直接:只要在各种平台上都实现Java虚拟机就可以
9、了。,每个Java程序的运行都在Java虚拟机的控制之下,Java虚拟机可以包含这个程序并且能阻止它在系统之外产生副作用。被解释的程序的运行速度通常确实会比同一个程序被编译为可执行代码的运行速度慢一些。但是对Java来说,这两者之间的差别不太大。使用字节码能够使Java运行时系统的程序执行速度比你想象的快得多。尽管Java被设计为解释执行的程序,但是在技术上Java并不妨碍动态将字节码编译为本机代码。SUN公司在Java 2发行版中提供了一个字节码编译器JIT(Just In Time,即时)。JIT是Java虚拟机的一部分,它根据需要、一部分一部分地将字节码实时编译为可执行代码。它不能将整个
10、Java程序一次性全部编译为可执行的代码,因为Java要执行各种检查,而这些检查只有在运行时才执行。,Java常用语Java设计开发小组总结了其他关键因素,称其为Java专门用语,如下: 简单(Simple) 安全(Secure) 可移植(Portable) 面向对象(Object-oriented) 健壮(Robust) 多线程(Multithreaded) 体系结构中立(Architecture-neutral) 解释执行(Interpreted) 高性能(High performance) 分布式(Distributed) 动态(Dynamic),简单如果你是一个经验丰富的C+程序员,那
11、就最好了,因为Java继承C/C+语法和许多C+面向对象的特性,大多数程序员在学习Java时都不会觉得太难。另外,C+中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚、更易理解的方式实现。面向对象尽管受到其前辈的影响,但Java没被设计成兼容其他语言源代码的程序。这允许Java开发组自由地从零开始。这样做的一个结果是,Java语言可以更直接、更易用、更实际的接近对象。 Java的对象模型既简单又容易扩展,对于简单数据类型,例如整数,它保持了高性能,但不是对象。,健壮为了获得可靠性,Java在一些关键的地方限制你,强迫你在程序开发过程中及早发现错误。同时,Java使你不必担心引起
12、编程错误的许多最常见的问题。因为Java是一种严格的类型语言,它不但在编译时检查代码,而且在运行时也检查代码。让我们考虑使程序失败的两个主要原因:内存管理错误和误操作引起的异常情况。例如,在C/C+中,程序员必须手工地分配并且释放所有的动态内存。这有时会导致问题,因为程序员可能忘记释放原来分配的内存,或者释放了其他部分程序正在使用的内存。Java通过替你管理内存分配和释放,可以从根本上消除这些问题(事实上,释放内存是完全自动的,因为Java为闲置的对象提供内存垃圾自动收集)。,多线程Java支持多线程编程,因而你用Java编写的应用程序可以同时执行多个任务。Java运行时系统在多线程同步方面具
13、有成熟的解决方案,这使你能够创建出运行平稳的交互式系统。结构中立Java设计者考虑的一个主要问题是程序代码的持久性和可移植性。程序员面临的一个主要问题是,不能保证今天编写的程序明天能否在同一台机器上顺利运行。操作系统升级、处理器升级以及核心系统资源的变化,都可能导致程序无法继续运行。Java设计者的目标是“只要写一次程序,在任何地方、任何时间该程序永远都能运行”。在很大程度上,Java实现了这个目标。,解释性和高性能其他解释执行的语言系统,如BASIC,Tcl,PERL都有无法克服的性能缺陷。然而,Java却可以在非常低档的CPU上顺利运行。前面已解释过,Java确实是一种解释性语言,Java
14、的字节码经过仔细设计,因而很容易便能使用JIT编译技术将字节码直接转换成高性能的本机代码。分布式Java发布了叫做远程方法调用(Remote Method Invocation ,RMI)的软件包,这个特性使客户机/服务器编程达到了无与伦比的抽象级。,动态Java程序带有多种的运行时类型信息,用于在运行时校验和解决对象访问问题。这使得在一种安全、有效的方式下动态地连接代码成为可能,对小应用程序环境的健壮性也十分重要,因为在运行时系统中,字节码内的小段程序可以动态地被更新。,继续革命在Java 1.0发布不久,Java的设计者已经创造出了Java 1.1。Java 1.1增加了许多新的库元素,并
15、且重新设置了1.0版中库的许多特性。它也放弃了原来由Java1.0定义的若干过时的特征。Java的第二个主要发布版本是Java 2。Java 2 是一个分水岭,它标志这个快速演变语言“现代时代”的开始!Java 2第一版本的版本号是1.2。Java 2增加了很多对新特性的支持,例如Swing和类集框架,并且它提高了Java虚拟机和各种编程工具的性能。Java的第三个版本是Java 2,1.3版。这个版本是对Java 2原来版本的第一次最主要的升级。该版本增强了Java大部分现有的功能。,Java不是增强的HTML在继续讲解前,有必要澄清一个普遍的误解。因为Java被用来创建网页,所以初学者有时将Java与超文本标记语言(HTML)混淆,或认为Java仅仅是对HTML的一些改进。幸好,这只是误解。实质上,HTML是一种定义信息逻辑的组织方式并提供相关信息的链接(叫超文本链接)。你可能知道,超文本链接(hypertext link)(也叫超链接)是把一个超文本与另一个超文本文档链接起来的工具,而这个被链接的超文本文档可能在本地或万维网上其他地方。超文本文档要素的定义是通过选择该超文本文档与另一个相关文档的链接,在用户搜索各种路径后,该超文本文档可以非线性的方式阅读。,