驱使计算机语言革新的因素有两个:程序设计技术的改进和计算环境的改变.Java也不例外,在大量继承C和C++的基础之上,Java还增加了反映当前程序设计技术状态的功能与精华.针对在线环境的蓬勃发展,Java为高度的分布式体系结构提供了流水线程序设计的功能.
Java是1991年由Sun Microsystems公司的James Gosling,Patrick Naughton,Chris Warth,Ed Frank 和Mike Sheridan共同构想的成果,这门语言最初命名为OAK,于1995年更名为Java.多少有些让人吃惊的是,设计Java的最初动力并不是源于Internet,而是为了开发一种独立于平台的语言,使其能够用于创建于不同家电设备的软件.你可能已猜到,不同类型的CPU都可以用作控制器.麻烦在于当时多数计算机语言都是针对特定的目标而设计的,例如C++.
虽然任何类型的CPU或许都能编译C++程序,然而这需要CPU有完整的C++编译器,而开发编译器的成本很高,并且很耗时.为了找到更好的解决方法,Gosling和其他人尝试开发一种可移植的跨平台语言,使该语言生成的代码可以在不同环境下的不同CPU上运行.这一努力最终导致Java的诞生.
大概就在即将设计出Java细节的时候,另一个对Java的成型有更重要影响的因素出现了,第二个动力就是World Wide Web.如果Web没有在Java即将成型的时候问世,那么Java可能会成为对消费类电子产品的程序设计而言有用但却晦涩的语言,然而随着Web的出现,以及Web对可移植程序的需求,Java被推倒了计算机语言设计的前台.
大多数程序员在工作不久就了解到可移植程序既令人期待,也让人难以捉摸.虽然在有了程序设计学科时就有了对创建高效可移植(平台独立)程序的需要,但还是让位于其他一些更为迫切的问题.Internet和Web的出现使原有的可移植行问题重新摆上了桌面.因为,Internet毕竟是由许多类型的计算机,操作系统和CPU组成的多样化的分布式空间.
曾经恼人的心绪,却没那么重要的问题也就成为要亟待解决的问题.到1993年,Java设计团队的成员发现,在创建嵌入式控制器时经常遇到的可移植性问题也出现在创建Internet代码中.了解到这一点以后,Java的重点从消费类电子产品转移到了Internet程序设计.因此,尽管开发独立于体系的程序设计语言的初衷提供了起初的星星之火,然而却是Internet最终促成了Java的燎原之势.
1.Java与C和C++的关系
Java与C和C++直接相关.Java继承了C的语法,Java的对象模型是从C++改编而来的.Java与C和C++的关系之所以重要,时出于以下几个原因:
首先,许多程序员熟悉C/C++语法.这样对于他们而言,学习Java就简单了.同样,Java程序员学习C/C++也是很简单的.
其次,Java设计者并没有重复工作.相反,他们进一步对已经成功的程序设计范式进行了提炼.现代程序设计始于C,而后过渡到C++,现在则是Java.通过大量的继承和进一步的构建,Java提供了强大的,可以更好利用已有成果的,逻辑一致的程序设计环境,并且增加了在线环境需求的新功能.然而,最重要的一点或许在于,由于他们的相似性,C,C++和Java为专业程序员定义了统一的概念架构.程序员从其中一种语言转为另一种语言时,不会遇到太大的困难.
C和C++的核心设计原理之一就是程序员拥有控制权.Java也继承了这一原理.除了Internet环境施加的约束以外,Java为程序员提供了完全的控制权.如果程序编写的出色,就会体现出来;如果较糟糕,也会体现出来.换句话说,Java并不是一种教学式语言,而是为专业程序员准备的语言.
Java还有与C和C++共有的特性:都由真正的程序员设计,测试和修改,与设计者的需求和经验紧密结合.因此,再没有比这更好的方法来创建如此一流的专业程序设计语言了.
因为Java与C++的相似性,特别是他们对面向对象程序设计的支持,所以有些程序员可能会将Java简单的看做”C++的Internet版”.然而,这种观点是错误的,因为Java在实际应用以及基本原理上与C++有着显著的区别.尽管Java受到C++的影响,但他绝对不是C++增强版,例如,Java不提供对C++的向上或向下兼容.当然,Java与C++的相似是十分明显的,例如你是一名C++程序员,那么在使用Java时会有驾轻就熟的感觉.另外,Java不是为替代C++而设计的,而是为了解决一系列特定问题而设计的.C++则是用来解决另一个不同系列的问题,两者将在未来共存.
2.Java与C#的关系
在Java问世后没几年,Microsoft开发出了C#语言.C#与Java密切相关.事实上,C#的许多功能都是直接从Java改编而来的.Java和C#共享相同的C++语法风格,都支持分布式程序设计,使用相同的对象模型.他们之间当然也有不同之处,但就整体而言,两者极为相似.这就意味着,如果已经了解C#,那么学习Java就很简单;反之,如果将来要学的是C#,那么现在学到的有关Java的知识也会对你将来有所帮助.
鉴于Java与C#两者的相似性,自然有人要问,C#会替代Java吗?答案是否定的.Java和C#是对两种不同类型计算环境的优化,正如C++会和Java长期共存一样,C#和Java也会长期共存.