你的位置:首页 > Java教程

[Java教程]再回首,Java温故知新(一):Java概述


  Java发展历程

  Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费产品设计一种小型语言,因为这些设备的处理能力和内存都有限,所以要求语言必须要小且能生成紧凑的代码。另外由于处理器的多样性,这种语言不能与任何体系结构有关联,这个项目就被命名为“Green”(参考国内许多软件绿色版)。提起平台无关性,Pascal之父Niklaus Wirth(尼古拉斯·沃斯)曾带领团队设计出一种为假想的机器生成中间代码的可移植语言,而这种假想的机器被称为虚拟机,Java虚拟机(JVM)就是由此而来。由于当时Sun公司的人都有Unix应用开发经验,所以语言是以C++为基础,Gosling将这种语言命名为Oak,随后发现Oak是一种已有的计算机语言的名字,于是将其改名为Java。

  1992年Green项目组发布了第一个产品,主要特性为智能远程控制,然而没有一家公司对比感兴趣,包括Sun。而后Green项目组以First Person公司花费1993年整整一年以及1994年上半年的时间来寻找其技术的买家,然而一个也没有找到。1994年First Person公司解散,而工作还在Sun公司中继续进行,同时互联网业日渐壮大,Web的关键是把超文本界面转换到浏览器中,1994年大部分人都在使用Mosaic,Java的开发者为了炫耀Java语言超强的能力,开发了HotJava浏览器,HotJava具有执行网页中内嵌代码的能力,即所谓的applet,在1995年5月23日的SunWorld上,这一技术印证得到了展示,同时引发了对Java的狂热追逐并延续至今。

  1996年年初,Sun发布了Java的第一个版本,但是这个版本并不能进行真正的应用开发,随后而来的Java1.1弥补了许多明显的缺陷,大大改进了反射能力,并为GUI编程增加了新的事件处理模型,但是仍具有很大的局限性。1998年JavaOne会议上,Java1.2版发布,取代了之前玩具式的GUI,并且图形工具箱更加精细而具有可伸缩性,此次更新推出了标准版、微型版和企业版,即Java2 SE、Java2 ME和Java2 EE。2000年发布的1.3版和2002年发布的1.4版只是对Java2版本进行BUG修正,扩展了标准类库,提高了系统性能,而在此期间,applet渐渐淡出了客户端的应用,Java成为服务器端应用的首选平台。

  2004年Java 5.0(一开始命名为1.5,但是在JavaOne会议后版本号提升至5.0)发布,这是自1.1版以来第一个对Java做出重大改进的版本,此次更新添加了泛型类型、“for each”循环、自动装箱和元数据等。2006年年末,Java 6发布,但是此次更新仅仅改进了性能、增强了类库,并未对语言方面再进行改进。2009年,Sun被Oracle收购,因此Java的开发停滞了很长一段时间,直到2011年Oracle发布了Java 7,但是只是做了一些简单的改进,决定把重要改进留到java 8。

  2014年Oracle发布了Java 8,此次更新的重点之一就是Lambda表达式,目的是使Java更易于为多核处理器编写代码;其次新加入的Nashorn引擎也使得Java程序可以和JavaScript代码互操作;加入了新的类库并改进GC和并发。由于版本升级带来的学习成本提升和语法变更导致的后期维护难度提升等因素,Java 8目前还未在实际开发中大范围的投入使用,而本人所入手的书籍也是以Java 7为基础进行讲解的,所以此次温故知新过程中不会过多的考虑Java 8。

  在Java 8还未大范围投入使用的时候,Oracle已发布Java 9的开发计划,根据计划来看,Java 9将于2016年发布。Java 9的更新重点则会是Java 模块化、统一JVM日志、JSON API以及更加智能的编译器,同时还会扩展标准类库。


  Java白皮书解读

  就目前的使用情况来看,Java的确是一种优秀的程序设计语言,然而Java并不只是一种语言,Java是一个完整的平台,它包括了许多可重用的代码和一个可提供垃圾回收等服务的执行环境。Java的设计者们编写了Java“白皮书”并发布了一个简短的摘要,主要是用来解释设计的初衷,这里我们根据摘要中的11个关键词来了解下Java,因为我个人对这11个词的理解有限,所以这里我尽量使用简单的描述来解释清楚这些概念,有可能会有所纰漏,希望有大神可以指点一二。

  1.简单性

  简单在这里有两个含义,一个是易学,另一个是小。易学指的是容易上手,Java在设计之初为了更容易理解还是选择尽可能的接近C++,剔除了C++中很多难理解、易混淆的特性,而到现在为止Java对于初学者而言也是比较容易上手;在上面的发展历程中提到过,Java设计之初是为了在小型机器上运行的,所以当时的体积非常小,然而经过了这么多年的扩展,现在的类库已经非常大了,不过也有针对小型机器的Java ME版本。

  2.面向对象

  面向对象是一种程序设计技术,它将重点放在数据和对象的接口上,在过去的几十年里,面向对象已经证明了自身的价值,现在新诞生的语言也都是基于面向对象,而Java也是基于面向对象,且从本质上来讲,面向对象的能力和C++相当,仅将后者的多继承改为了更为简单的接口。

  3.网络技能

  网络编程时Java的强项,Java有强大的类库用于处理网络相关的内容,Java较之其他语言大幅度简化了类似于socket之类的网络编程,而远程方法调用机制则使得分布式对象可以进行通信。

  4.健壮性

  Java的健壮性主要是Java程序不会有内存分配的错误,相较于C++,Java投入了大量的精力进行早期问题检测和动态监测,而且Java的指针模型可以消除重写内存和损坏数据的可能。

  5.安全性

  安全性几乎是所有语言都会考虑的一个特性,Java在设计时是要适用于网络和分布式环境,所以在安全性方面下了很大功夫。从Java 1.0开始,sun公司就大力支持对于Java安全性的研究,在这20多年间,众多安全特性相继加入Java中,Java的安全机制也越发强大,但是大家都知道,任何系统都会有安全问题,只是多少的问题。

  6.体系结构中立

  这个关键词我们可以理解为硬件上的跨平台,上边提到Java设计之初考虑到了处理器的多样性,所以要求语言与处理器类型无关,通过Java虚拟机实现了硬件的跨平台,只要有Java运行时环境即可运行。

  7.可移植性

  这个特性就是平时所说的跨平台,Java和C++不同的是Java没有依赖具体实现的地方,基本数据大小等都做了明确的说明,例如int永远为32位,而在C++中有可能是16位,也有可能是32位。

  8.解释型

  Java解释器可以在任何移植了解释器的机器上执行java的字节码。这一特性并没有给java带来太多的好处,而且导致Java的早期开发工具速度非常慢,Java目前是使用即使编译器将字节码翻译成机器码。

  9.高性能

  Java的高性能这一特性主要来自于即时编译器,Java刚开始时的高性能主要是“适用性更强”,然而现在的即时编译器性能已经逐渐的超越传统编译器,可以包含更多的可用信息,而且可消除函数的调用。

  10.多线程

  多线程是Java成为服务器端主力开发语言的主要原因之一,Java可以便捷的进行多线程处理,而且还具备平台无关性,因为Java将多线程的实现交给了操作系统和底层的线程库来实现。

  11.动态性

  Java目前是允许程序员获得运行时对象的结构和行为,Java的动态性表现在java的库可以不断的添加新方法等,而且对现有程序不会有任何影响。