Java是由James Gosling、Patrick Naughton、Chris Warth、Ed Frank和Mike Sheridan于1991年在Sun公司构想出来的。开发第一个版本花费了18个月。这种语言最初称为Oak,在1995年被命名为Java。从1992年秋Oak最初实现到1995年春Java语言的公开发布,许多人对Java的设计和改进作出了贡献。Bill Joy、Arthur van Hoff、Jonathan Payne、Frank Yellin和Tim Lindholm是主要贡献者,他们的奉献使Java的最初原型逐渐成熟。 有些让人惊奇的是,Java的最初推动力不是Internet!相反,主要动机是对平台独立(即体系结构中立)语言的需要,这种语言可用于开发能够嵌入到各种消费类电子设备(例如微波炉、遥控器)的软件。您可能已经猜到了,许多不同类型的CPU被用作控制器。使用C和C++语言(以及大部分其他语言)的麻烦是,它们被设计为针对特定的目标进行编译。尽管能够为各种类型的CPU编译C++程序,但是这需要一个完整的以该CPU为目标的C++编译器。问题是创建编译器很耗费时间,所以需要一种更容易并且更经济的解决方案。在寻找这样一种方案的尝试过程中,Gosling和其他人一起开始开发一种可移植的、平台独立的语言,可以使用这种语言生成在不同环境下运行于各种CPU之上的代码。他们的努力最终导致了Java的出现。 在Java的细节被开发出来的同时,第二个并且最终也更加重要的因素出现了,它在Java的未来中扮演了关键的角色。第二个动力当然是万维网。假如Web的形成和Java的出现不在同一时间,那么Java虽然仍会有用,但可能只是一种用于为消费类电子产品编写代码的没有名气的语言。然而,随着万维网的出现,Java被推到计算机语言设计的最前沿,因为Web也需要可移植的程序。
大部分程序员在职业生涯的早期就知道,可移植程序既让人向往又让人逃避。尽管人们对创建高效、可移植(平台独立的)程序的探索,几乎和编程自身的历史一样久远,但它总是让位于其他更为紧迫的问题。此外,因为在那时计算机界已经被Intel、Macintosh和UNIX这三个竞争阵营垄断,大多数程序员都在其中的某个领域内工作,所以对可移植性编码的迫切需求降低了。但是,随着Internet和Web的出现,古老的可移植性问题又出现了。毕竟,Internet是由各种各样的、分布式的系统构成的,这些系统使用各种类型的计算机、操作系统和CPU。尽管许多类型的平台都依附于Internet,但是用户仍然希望他们能够运行相同的程序。曾经是一个令人烦恼、但是优先级较低的问题,已经变成了必须解决的问题。 在为嵌入式控制器编写代码时经常遇到的可移植性问题,在尝试为Internet编写代码的过程中也出现了。到了1993年,这个问题对于Java设计小组的成员而言已经变得很明显了。实际上,最初针对解决小范围问题而设计的Java,也可以应用于更大范围的Internet。这一认识导致Java的关注点由消费类电子产品转移到了Internet编程。因此,虽然对体系结构中立的编程语言的需求提供了最初的思想火花,但最终是Internet成就了Java的成功。 正如在前面提到的,Java从C和C++继承了许多特性,这是有意而为之。Java设计人员清楚,使用与C语言类似的语法以及模仿C++的面向对象特性,可以使Java语言对于众多经验丰富的C/C++程序员更具吸引力。除了表面类似外,Java还借鉴了帮助C和C++成功的其他一些特性。首先,Java的设计、测试和不断改进是由真正从事编程工作的人员完成的。它是扎根于设计人员的需要和经验的一种语言。因此Java是程序员的语言。其次,Java结构紧凑并且逻辑上协调一致。最后,除了Internet强加的那些约束外,Java为程序员提供了完全的控制权。如果程序编写的好,程序本身就能反映出来。如果程序编写的不好,程序本身也能反映出来。因为存在这样的区别,所以Java不是一种用于培训的语言,而是针对专业程序员的语言。 因为Java与C++之间的相似性,可能会简单地将Java看作“Internet版的C++”。但是,如果这么认为,将会是很大的错误。Java无论是在实践上还是在理论上都与C++有着很大的区别。虽然Java深受C++的影响,但它不是C++的增强版。例如,Java与C++既不向上兼容,也不向下兼容。当然,与C++之间的相似性还是很明显的。并且,如果您是一位C++程序员的话,会感觉Java很熟悉。另外一点:设计Java的目的不是取代C++。Java是针对解决特定的一系列问题而设计的。Java和C++将会长期共存。 正如在本章开头提到的,计算机语言的发展取决于两个因素:适应环境的变化以及实现编程艺术的提高。促使Java发展的环境变化是对平台独立程序的需求,Internet上的分布式系统天生就需要平台独立的程序。同时,Java也体现了编程方式的变化。例如,Java增强并改进了C++使用的面向对象编程,增加了对多线程的支持,提供了简化Internet访问的库。总之,并不是Java的某个单一特征,而是整体上作为一种语言,使它如此非凡。Java是对新出现的高度分布计算领域需求的完美响应。Java对于Internet编程的意义,就如同C语言对系统编程一样:它们都是改变世界的革命性力量。
C#连接
在计算机语言开发领域,人们会继续感受到Java的影响和力量。许多创新性的特征、结构以及概念,已经成为所有新语言的基准组成部分。Java是如此成功以至于不可忽视。
Java影响力的最重要例子可能是C#。C#是由Microsoft创建的用于支持.NET Framework的语言,C#与Java密切相关。例如,两者共享相同的语法,都支持分布式编程,并且都利用相同的对象模型。当然,Java和C#之间也有一些区别,但是总的看来这两种语言很相似。从Java到C#的这种“异花授粉”,正是对Java影响力最强有力的证明。