Java语言的历史要追溯到1991年,当时Sun公司的Patrick Naughton及其伙伴James Gosling带领的工程师小组(Green项目组)准备研发一种能够应用于智能家电(如电视机、电冰箱)的小型语言。由于家电设备的处理能力和内存空间都很有限,所以要求这种语言必须非常简练,且能够生成非常紧凑的代码。同时,由于不同的家电生产商会选择不同的中央处理器(CPU),因此还要求这种语言不能与任何特定的体系结构捆绑在一起,即必须具有跨平台能力。
项目开始时,项目组首先从改写C/C++语言编译器着手,但是在改写过程中感到仅使用C语言无法满足需要,而C++语言又过于复杂,安全性也差,无法满足项目设计的需要。于是项目组从1991年6月开始研发一种新的编程语言,并命名为Oak,但后来发现Oak已被另一个公司注册,于是又将其改名为Java,并配了一杯冒着热气的咖啡图案作为标志。
1992年,Green项目组发布了它的第一个产品,称为“*7”。该产品具有非常智能的远程控制。遗憾的是当时的智能消费型电子产品市场还很不成熟,没有一家公司对此感兴趣,该产品以失败而告终。到了1993年,Sun公司重新分析市场需求,认为网络具有非常好的发展前景,而且Java语言似乎非常适合网络编程,于是Sun公司将Java语言的应用转向了网络市场。
1994年,在James Gosling的带领下,项目组采用Java语言开发了功能强大的HotJava浏览器。为了炫耀Java语言的超强能力,项目组让HotJava浏览器具有执行网页中内嵌代码的能力,为网页增加了“动态的内容”。这一“技术印证”在1995年的SunWorld上得到了展示,同时引发了人们延续至今的对Java语言的狂热追逐。
Java语言的发展历程可以分为以下几个阶段。
Java 1.0(1996年1月23日):这是Java语言的第一个版本,也被称为JDK 1.0。这个版本可以用于开发应用程序,并且推出了JIT(即时编译器)技术,使得Java代码可以被编译成本地机器代码,提高了程序的运行效率。
Java 2(1998年12月8日):这个版本也被称为JDK 1.2,是Java历史上具有划时代意义的版本。它推出了许多新的技术和工具,例如Java虚拟机(JVM)、垃圾回收器、多线程支持、安全模型等。此外,Java 2还分为三个不同的版本:标准版(J2SE)、企业版(J2EE)和移动版(J2ME)。
Java 5(2004年9月30日):这个版本也被称为JDK 1.5,是Java语言的一个重要更新。它推出了许多新的特性和语法,例如自动装箱和拆箱、泛型、枚举、可变参数、增强的for循环等。
Java 6(2006年12月11日):这个版本相对于Java 5有了进一步的改进和优化,推出了许多新的类库和工具,例如JavaFX、Java EE 5等。
Java 7(2011年7月28日):这个版本也被称为JDK 1.7,是Java语言的一次重要更新。它推出了许多新的特性和语法,例如try-with-resources语句、Coin项目中的许多新功能等。
Java 8(2014年3月18日):这个版本也被称为JDK 1.8,是Java语言的一次重要更新。它推出了许多新的特性和语法,例如Lambda表达式、Stream API、Optional类等。
Java 9(2017年9月21日):这个版本也被称为JDK 9,是Java语言的一次重要更新。它推出了许多新的特性和语法,例如模块化系统、新的HTTP客户端API等。
目前Oracle公司发布的最新的长期支持版本是Java 21。
以上是Java语言的发展历程中的一些重要阶段和版本。从Java语言诞生至今,它已经成为了编程语言市场上的重要一员,被广泛应用于各种领域中。
在学习任何一门语言之前,都应该先了解该门语言产生的背景、发展历程以及特点,这样才能对该语言有一个比较全面的了解,从而使以后的学习更加有效。Java的特点与其发展历史是紧密相关的。它之所以能够受到如此多的好评以及拥有如此迅猛的发展速度,与其语言本身的特点是分不开的。其主要特点总结如下。
(1)简单性
Java语言是在C++语言的基础上进行简化和改进的一种新型编程语言。它去掉了C++中最难正确应用的指针和最难理解的多重继承技术等内容。因此,Java语言具有功能强大和简单易用两个特征。
(2)面向对象性
Java语言是一种新的编程语言,没有兼容面向过程编程语言的负担,因此和C++相比,其面向对象的特性更加突出。
Java语言的设计集中于对象及其接口。它提供简单的类机制及动态的接口模型。与其他面向对象的语言一样,Java具备继承、封装及多态等核心技术,更提供一些类的原型,程序员可以通过继承机制,实现代码的复用。
(3)分布性
Java从诞生之日起就与网络联系在一起。它强调网络特性,从而使其成为一种分布式程序设计语言。Java语言包括一个支持HTTP等基于TCP/IP协议的子库。它提供一个Java.net包,通过它可以完成各种层次上的网络连接。因此Java语言编写的应用程序可以凭借URL打开并访问网络上的对象,其访问方式与访问本地文件几乎完全相同。Java语言的Socket类提供可靠的流式网络连接,使程序设计者可以非常方便地创建分布式应用程序。
(4)平台无关性
借助于Java虚拟机(JVM),使用Java语言编写的应用程序不需要进行任何修改,就可以在不同的软、硬件平台上运行。
(5)安全性
安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性:Java的数据结构是完整的对象,这些封装过的数据类型具有安全性;编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类;运行时Java类需要类加载器载入,并经由字节码校验器校验之后才可以运行;Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。
(6)多线程
多线程机制使应用程序能够并行执行。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上的实时交互行为和实时控制性能。
大多数高级语言(包括C、C++等)都不支持多线程,用它们只能编写顺序执行的程序(除非有操作系统API的支持)。而Java却内置了语言级多线程功能,提供现成的Thread类。只要继承这个类就可以编写多线程的程序,使用户程序并行执行。Java提供的同步机制可保证各线程对共享数据的正确操作,完成各自的特定任务。在硬件条件允许的情况下,这些线程可以直接分布到各个CPU上,充分发挥硬件性能,减少用户等待的时间。
(7)自动垃圾回收性
在用C及C++编写大型软件时,编程人员必须自己管理所用的内存块,这项工作非常困难,并容易成为出错和内存不足的根源。在Java环境下编程人员不必为内存管理操心,Java虚拟机有一个叫作“无用单元收集器”的内置程序。它扫描内存,并自动释放那些不再使用的内存块。Java语言的这种自动垃圾收集机制,对程序不再引用的对象自动取消其所占资源,彻底消除了出现内存泄漏之类的错误,并免去了程序员管理内存的烦琐工作。