JAVA的起源

Java的起源

计算机发展需要2哥基本因素的驱动:

适应不断变化的环境和需求;

编程艺术的不断完善与提高

Java的由来

语法继承了c,面向对象的特性继承了c++,而且Java语言的产生与过去几十年计算机编程语言的改进和发展密切相关,语言设计的每一次革新是因为旧的语言无法解决某个基本问题所引起的,Java也不例外。

C

替代汇编语言,开发系统程序  特性:易用性和功能  安全性和效率   稳定性和可扩展性FORTRAN:科学计算应用方面可以编写出相当高效的程序,但它不适合编写系统程序,BASIC虽然易学,但功能不够强大,并且谈不上结构化,应用到大程序令人怀疑,汇编语言虽能写出高效率的程序,但是学习或者高效地使用不容易,而且调试汇编程序也相当困难。

早期设计的计算机语言(如BASIC、COBOL、FORTRAN)没有考虑结构化,使用GOTO语句,这样做的结果是一大堆混乱的跳转语句和条件分支语句使得程序几乎不可能被读懂。Pascal虽然是结构化语言,但它的设计效率较低,而且缺少几个必需的特性,因而无法在大的编程范围内使用。20世纪70年代初期,计算机革命开始,使用早期语言进行软件开发无法满足这种需求,当然硬件资源充足,是促使c诞生的一个也许最重要的因素。

Dennis Ritchie在运行UNIX操作系统的DECPDP-11上发明并首次实现了c,而Martin Richards设计的BCPL语言导致了c语言开发成功受BCPL影响,由Brian Kernighan 发明的B语言也逐渐向c语言发展演变,在此后的许多年里,Brian Kernighan和Dennis Ritchie编写的The C Programming Language(Prentice-Hall,1978)被认为是事实上的C语言标准,89年12月美国国家标准化组织(ANSI)制定了C语言的标准。

C语言的特性由实际运用该语言的人们不断提炼、测试、思考、再思考使其成为程序员们喜欢使用的语言。

C++:更上一层楼

20世纪70年代末和80年代初,C语言成为主流计算机编程语言,至今仍被广泛使用,你也许会问,既然C是一种如此成功且有用的语言,为什么还需要新的计算机语言?答案是:复杂性,纵观编程的历史,正是程序日益增加的复杂性驱使人们寻求管理复杂性的更好方法。c++正是适应了这一需求,为什么管理程序复杂性是C++产生的基本条件呢?

计算机出生:面板触发器(人工打孔)——》对于只有几百行的程序,这种办法是可行的,随着程序不断变大,人们发明汇编语言,它使用符号来代替机器指令,这样程序员就能处理更大更复杂的程序,随着程序进一步变大,高级语言产生了,它给程序员提供了更多的工具来处理复杂性问题。20世纪80年代初,许多工程项目都令结构化方法到达了极限。为解决这个问题,一种面向对象编程的新编程方法诞生,在这里先给出一个简短的定义:面向对象的编程是通过使用继承性、封装性和多态性来组织复杂程序的编程方法。

尽管C伟大,但是处理复杂性的能力有限。一旦一个程序的代码超过25000~100000行,就因为过于复杂从而很难把握,C++突破了这个限制,可以帮助程序员理解和管理更大的程序。

1979年Bjiarne Stroustrup发明C++,最初成为带类的C,83年改名C++,通过增加面向对象的特性扩充了C。因为C++建立在C的基础之上,所以包括C的所有特性、属性和优点,这是C++作为一种语言的成功的关键原因,发明C++不是企图创造一种全新的编程语言,相反,它是对一个已经高度成功的语言的改进。

Java出现的时机已经到来

20世纪80年代末和90年代初,使用面向对象编程的C++语言占主导地位,甚至有一段时间程序员似乎都认为已经找到了一种完美的语言。然而,推动计算机语言进化的力量正在酝酿。在随后的几年里,万维网和Internet事件促成了编程的另一场革命。

Java诞生

Java是由Jamcs Gosling、Patrick Naughton、Chris Warth、Ed Frank 和Mike Sheridan于1991年在Sun Microsystems公司设计出来,最初推动力并非Internet而是源于对独立于平台语言的需要,这种语言可开发能嵌入微波炉、遥控器等各种家用电器设备软件。用作控制器的CPU是多种多样的,但是c和c++(以及其他绝大多数语言)的缺点是只能对特定目标进行编译。尽管为任何类型的cpu是多种多样的,但c和c++的缺点只能对特定目标进行编译,尽管为任何类型的cpu编译c++程序是可能的,但是需要一个完整的以该cpu为目标的c++编译器,而创建编译器是一项既耗费又耗时的工作,因此需要一种简单且更为经济高效的解决方案。为了找到这种方案,Gosling和其他人一起致力于开发一种致力于开发一种可移植的、平台独立的语言,该语言能够生成运行于不同环境、不同cpu上的代码,他们的努力最终促成了Java的诞生。

www诞生对java的未来起到至关重要的作用

Java与C++不兼容,对Java影响最大的是c#,二者使用相同的语法,而且均支持分布式程序设计,使用相同的对象模型等。

Java对Internet重要性

二者互补原因简单,Java扩展了可以在电脑空间自由流动的对象的世界在网络中有两大类对象在服务器和个人计算机之间传输:被动的信息和动态的、主动的程序例如,当阅读电子邮件时,是在看被动的数据,甚至当你下载一个程序时,该程序的代码也是被动的数据,直到你执行它为止。可以传输到个人计算机的另一类对象是动态的,自运行的程序,虽然这类程序是客户机上的活动代理,但却是由服务器来初始化的例如,服务器提供用来正确地显示服务器传送数据的程序。网络程序在动态上是令人满意的,但是在可移植上和安全性上却带来了严重的问题,在java出现之前有一半以上的电脑实体无法进入网络世界,是java为它们打开了便利之门,而且在这个过程中定义了一种全新的程序形式:applet(小应用程序)

Java applet

applet是可以在Internet中传输并可以兼容Java的web浏览器中运行的特殊Java程序,applet可以随需下载,就像图像、声音文件和视频文件。换句话说,它能对用户的输入做出反应,并且能动态的变化,而不是一遍又一遍地播放同一动画或声音。

如果java不能解决两个关于applet最棘手的问题:安全性和可移植性,那么applet就不会如此令人激动了

安全性

众所周知,每次下载一个正常的程序时,都要冒着被病毒感染的危险,在java出现之前,大多数用户并不经常下载可执行的程序文件,即使下载也要进行病毒检查,尽管如此,大多数用户还是担心,除了病毒还有恶意程序也要警惕,这种程序通过搜索计算机本地文件系统的内容来收集你的私人信息,例如信用卡号码,银行账户结算和口令而Java在网络应用程序和用户的计算机之间提供了一道防火墙(firewall),消除了用户这些顾虑

将java程序编译成字节码有助于更容易地在一个大的范围环境下运行程序原因非常简单,只要在各种操作平台上实现java虚拟机就可以了。在一个给定的系统中,只要系统运行时包存在,任何java程序就可以在该系统上运行。记住,尽管不同平台的java虚拟机的细节有所不同,但它们都理解相同的java字节码,如果java程序被编译为本机代码,那么对于连接到Internet上的每种cpu类型都要有该程序的对应版本,这当然不是一种可行的解决方案。因此,通过JVM执行字节码是编写真正可移植性程序最容易的方法

JVM执行java程序有助于提高安全性,因为 jvm控制java程序的运行,所以它可以包含这个程序并且能阻止它在系统之外产生负作用,而java语言特有的某些限制增强了它的安全性

java专门用语

简单(simple)安全(secure)可移植(Portable)面向对象(Object-oriented)健壮(Robust)多线程(Multithread)体系结构中立(Architecture-neutral)解释执行(Interpreted)高性能(High perforance分布式(Distributed)动态(Dynamic) 

健壮性:先考虑使程序失败的两个重要原因:内存管理错误,和误操作引起的异常情况(运行时错误)。在传统的编程环境下,内存管理是一项困难乏味的任务。例如:在c++/c中程序员必须手工分配和释放所有的动态内存。就会出现问题,因为程序员可能忘记释放原来分配的内存,或者释放了其他正在使用的内存,而通过Java管理内存分配和释放,可以从根本上消除这些问题(事实上释放内存是完全自动的,因为Java为闲置的对象提供了内存垃圾自动收集)。在传统的环境下,异常情况可能经常由“除零”或“文件未找到”这样的情况所引起,而我们又必须用既笨拙又难以理解的一大堆指令来对它们进行管理,Java通过提供面向对象的异常处理机制解决这个问题。在编写良好的Java程序中,所有的运行时错误都可以并且应该有程序自身进行管理

多线程

设计Java的目标之一是满足人们对创建交互式网络程序的需要,为此,Java支持多线程编程,因而用Java编写的应用程序可以同时执行多个任务,Java运行时系统在多线程同步方面具有成熟的解决方案,能够创建出运行平稳的交互式系统,Java的多线程机制非常好用,所以只需关注程序特定的行为,不用担心多任务子系统

体系结构中立

Java设计者考虑主要问题是程序代码的持久性和可移植性。程序员面临的问题是不能保证今天的程序明天能否在同一台机器上顺利运行。操作系统升级、处理器升级以及核心系统资源的变化,都可能导致程序无法继续运行,Java设计者对这个问题做过多种尝试,Java虚拟机就是用来解决这个问题的。它们的目标是“只要写一次程序,在任何地方、任何时间该程序永远都能执行”这在很大程度上,Java实现了这个目标

解释执行和高性能

前面说过,通过把程序编译为Java字节码,Java可以产生跨平台运行的程序。该代码可以在提供Java虚拟机的任何一种系统上执行,其他的跨平台解决方案对性能要求都很高,而Java的字节码经过设计后,很容易用JIT编译器将字节码直接转换成高性能的本机代码,Java运行时,系统在提供这个特性的同时仍具有平台独立性

分布式

Java是为Internet的分布式环境而设计,因为它能处理TCP/IP协议事实上,通过URL地址访问资源与直接访问一个文件的差别并不太大。Java还支持远程方法调用(Remote Method Invocation,RMI)使程序能够跨网络调用方法。

动态:

Java程序带有多种运行时类型信息,用于在运行时校验和解决对象访问问题。这使得在一种安全,有效的方式下动态地链接代码成为可能,同时对applet环境的健壮性十分重要,因为在运行的系统中,可以动态地更新字节码内的小段程序

java的演化

Java的最初发布本不亚于一场革命,但是它并不标志着Java快速革新时代的结束。与其他软件系统经常进行小的改进不同,Java以爆炸式的步伐向前发展。Java1.0发布后不久,Java的设计者开发出了Java1.1Java1.1新增的特性远比普通意义上的版本修订的内容丰富许多,Java1.1增加了许多新的库元素,重新定义了applet处理事件的方法,并且重新设置了1.0版中库的许多特性,同时它也放弃了原来的由Java1.0定义的若干过时的特征。

java的第二个版本是java2,“2”代表是第二代,java2是一个分水岭,它标志着java现代时的开始!java2第一版本号是1.2,其原因是1.2最初指的是java库的内部版本号,后来才用作整个发行版。Sun公司将其java产品重新组装为J2SE(java2平台标准版)

java2增加了很多新特性,例如Swing和集合框架(collection framework),并且还提高了java虚拟机和各种编程工具的性能。java2也包含了一些不赞成继续使用的内容主要是Thread类中suspend()、resume()和stop()等方法

Java下一个版本是J2SE1.3这个版本是Java2最初版本的第一次主要升级。该版本增强了Java大部分现有的功能,并且限制了开发环境。总的说来。版本1.2和1.3的程序源代码是兼容的

J2se1.4发布进一步增强了java此发行版包括了许多重要的升级、改进和新增功能例如,新增了关键词assert、链式异常和一个基于心道的i/o子系统,它同时对集合框架和网络类作乐改动。另外还有不计其数的小改动贯穿其中。尽管引进了很多新功能,但版本1.4几乎与先前版本几乎保持了百分之百的源代码兼容。Java的最新版本是J2se 5,它无疑是另一场革命!

J2SE最新版本是J2SE5,它无疑是另一场革命!

J2SE5革命

是java生命里程碑上一个重要的事件。与java先前大多数升级不同,j2se5提供的不是递增式的改进,而是从根本上拓展了java语言的作用域,功能和范围,java的任何一次发行都无法与J2SE5相提并论。为了领会关注一下新特性

泛型 冗数据 自动装箱和自动拆箱(Autoboxing和Auto-unboxing)枚举 增强的for-each风格的for循环 变长参数 静态导入 格式化I/O 并行工具 对API的升级

上述这些特性不是枝节的改动和递增式的升级,每一项都代表着对java语言的重大引进。比如泛型。增强的for循环类型,和变长参数,引进了新的语法元素,自动装箱和自动拆箱,改变了java的语言的句法冗数据将一种全新的标准引入到编程领域,所有这些新增特性,不仅造成了直接影响,而且还改变了java本身的基本特性

这些新增的特性重要性反映了在版本号“5”的才用上,下一个版本号正常情况应为1.5,但这些变化和新增的特性是在是太重要了仅从1.4转向1.5不足以说明变化之大,因此,Sun公司选择将发行号增至5来强调,当前产品被称为J2SE 5,开发者工具箱被称为JDK 5,不过处于维持一致性的考虑,Sun决定将内部版本号定为1.5,即“5”是外部版本号,“1.5”是内部版本号。

文化革新

从一开始,Java就处于文化革新的中心位置。它的第一个发行版重新定义了面向Internet的程序设计,Java虚拟机(JVM和字节码)改变了我们对安全性和可移植性的认识,applet(包括其后的servlet)给Web带来了盎然生机,Java社区项目重新定义了Java语言吸收新理念的方式,Java世界从来都不是静止不前一成不变的。

随着J2SE的发行,Java又一次获得涅馨,适应了变化莫测的编程前景的需求,也又一次成功地站到了计算机语言设计领域的最前沿。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值