探索Java的起源与发展

发表时间: 2023-05-13 18:12

概述

Java 是全世界软件开发人员使用的最流行的编程语言之一。James Gosling(Java之父) 在20世纪90年代早期开发了 Java 作为一种面向对象程序(OOP)设计语言。多年来,该语言已经成为许多平台上数百万应用程序的基础,例如 Windows、 Macintosh、 UNIX、基于 Android 的手持设备、嵌入式系统和企业解决方案。根据甲骨文(Oracle)公司(2010年收购了Sun)的数据,Java 运行在超过30亿部智能手机上。在本文中,我们将探索 Java 的历史和背后的哲学。

一组相对比较权威的Java使用数据:

  • 97% 的企业桌面运行 Java
  • 美国有 89% 的桌面(或计算机)运行 Java
  • 全球有 900 万 Java 开发人员
  • 开发人员的头号选择
  • 排名第一的部署平台
  • 有 30 亿部移动电话运行 Java
  • 100% 的蓝光盘播放器附带了 Java
  • 有 50 亿张 Java 卡在使用
  • 1.25 亿台 TV 设备运行 Java
  • 前 5 个原始设备制造商均提供了 Java ME

由此我引发一个猜想,在中国是不是10个程序员中8个都是java程序员呢?

Java是什么?

Java 是一种高级的,健壮的,面向对象的,安全的编程语言和平台。

show me your code

public class Simple {    public static void main(String[] args) {        System.out.println("Hello,world");    }}

Java发展史

  • 早期语言发展

Java出现之前,C++已经是这个行业的主导者。Java创建者的主要目标是创建一种能够与C++相媲美的语言并且能够更加高级和易用,同时能摆脱早期语言中一些更加乏味的任务。(比如:跨平台,垃圾自动回收,大量工具类等,在当时来看对于刚入门的程序员来说选择Java的编程难度应该比C++小很多,即使现在也是如此

从1972年到1991年,计算机硬件经历了一场性能和价格革命。更好、更快的硬件以更低的价格出售,对大型复杂软件的需求也呈指数级增长。为了满足需求,新的开发技术被发明出来。(类比目前的单体架构到分布式架构的过渡,不难看出一个规律:硬件的发展和迫切的需求也是推动软件和编程语言不断发展的重要因素,同时摩尔定律也反映了这一事实

由 Dennis Ritchie 在1972年开发的 C 语言花了十年时间才成为在 PC 和类似平台上工作的程序员中最流行的语言。但是,随着时间的推移,程序员发现用 C 语言编程会变得冗长乏味。因此人们尝试去解决这个问题,后来有一种新的编程思想被引进,它就是目前大名鼎鼎的面向对象编程(Object-Oriented Programming,简称OOP)。在OOP思想的指导下,代码可以被大量的复用而不是一遍又一遍的重复去写相同的逻辑代码。1979年,Bjarne Stroustrup在C语言的基础上增加了OOP的原理和特性开发了C++。(由此可见,OOP在当时编程语言中绝对是一个影响深远的哲学,了解了这段历史也明白了OOP并不是Java所独有的,甚至C++要比Java更早应用OOP,只是相对于后面的新语言Java较早使用了这个思想

  • 组织诞生(Green Team)

1990年12月,一个封闭开发的项目被提出,相比于C和C++的复杂和枯燥,主要目的就是开发一个更好和易用的编程工具。其实在此之前Patrick Naughton(Sun的早期工程师)已经对C和C++的APIs和工具集感到非常沮丧。当他准备跳槽去NeXT(一家美国科技公司,专门从事高等教育和商业用途的计算机工作站)时,他得到了一个去研究新技术的机会。(这边的细节无从考证,我觉得首先Patrick Naughton的意愿足够大加上背后资本的支持,项目立项是顺利成章的事情)。

在James Gosling和Mike Sheridan加入后,这个项目被命名为Green Project。随着时间推移和工程师们认知的逐步提升,目标不再是创造一种远远优于现有语言的新语言,而是瞄准计算机以外的设备。

团队一共13人在加利福尼亚的Menlo Park的一间小办公室里边开始办公。自此这个团队就被称为Green Team。他们经历的这个项目是由Sun特许进行的,旨在预测和规划计算领域的“下一波浪潮”。作为这样的一个研究团队,数字消费设备和计算机的融合是当时的一个大的趋势。

  • Oak(Java前身)起源

团队开始考虑用更好的版本、更快的版本、响应式版本来替代 C++。但是有一件事情他们还没有想到,那就是他们设计的语言必须为资源有限的嵌入式系统开发。对于这样一个系统,C++或任何后继者看起来都太大了,因为当时所有的语言都比预期占用更大内存。因此,团队不得不以不同的方式思考如何解决所有这些问题。

后来Bill Joy(Sun的联合创始人),为Sun的工程师们发表了一篇《Further》论文,设想了一种将 Mesa 和 c 的能力结合在一起的语言。随后团队收集想法,James Gosling(其实Gosling当时就是事实意义上的架构师和leader)开始致力于增强C 并命名为“C ++ ++--”但是他很快就放弃了这个名字,用他办公室外面那棵树的名字叫它橡树(Oak)。

  • Java诞生

在此期间,Oak其实已经发展的很好了,但是在1993年,人们看到了机顶盒、互动电视和 PDA 的消亡。这些硬件的消亡也彻底改变了这帮创始人的想法。

时代洪流终究是抵挡不住的,NCSA(National Center for Supercomputing Applications)去年发布了一款互联网商业浏览器,这个基础设施的建立让Green Team的重点现在转移到他们认为的“下一波”计算机应该在的地方——互联网。然后,研究小组进入了创建可嵌入技术的领域,这种技术可以在网页浏览器中使用,称之为 applet(早期学习Java的一定不陌生)。结合Oak的开发经验和以上互联网背景的出现,工程师们又对该语言提出了新的要求(看看下面的特性和要求是不是越来越逼近Java了):

1、足够简单,从早期语言中收集经过测试的基本原理和特性

2、拥有与语言捆绑的具有基本和高级特性的标准 API 集

3、去掉那些需要直接操作硬件以保证语言安全的概念

4、独立于平台,并且可以为每个平台只编写一次(write once, run anywhere)

5、能够开箱即用地操作网络编程

6、可嵌入网页浏览器

7、同一时间单个程序能够实现多个任务和处理多件事情(多线程)

完成以上特性的开发,团队最终决定将该语言命名为Java(为什么最后没有用Oak,据说当时Oak已经被其它公司所注册)。最后在SunWorldTM 会议上,Andreesen向大众展示了这项新技术。随着互联网的兴起,Java 很快得到了广泛的认可,人们对它成为浏览器和消费者应用程序的主导软件的期望也越来越高。

就这样,在当时对其他语言不满的基础上和互联网技术的催化下,新一代编程语言霸主诞生了,并且长期统治编程界从1995左右一直持续到现在,并且还在不停进化中。后起之秀都在不断挑战它的地位,但是目前来说还没有可以完全替代它的语言,它的生态已经强大到无可替代。

版本发展

  • 初始版本(version 1.0和 1.1)

1996年,Java为Solaris, Windows, Mac OS,linux操作系统发布了jdk1.0。包含java虚拟机和类库,和一些开发工具。后来,Sun还提供了一个仅在运行时使用的包,叫做JRE。然而,由于名字一直沿用至今,因此人们通常用 JDK 版本来指代特定版本的 Java。

  • Java2(version 1.2)

1998年,作为一个对之前版本的快速修复发布,1.2版本是 Java 新开端的开始。版本1.2和更高版本的 JDK 通常也被称为 Java2。例如,JDK 1.4的官方名称是 Java (TM)2 Platform,Standard Edition version 1.4。

主要特性:

1、重写了事件处理(新增了Event Listeners)

2、更改了线程同步

3、推出了即时编译器(JIT-Just in time)

  • Kestrel (Java 1.3)

2000年5月8日,工程代号为Kestrel美洲红隼)的Java 1.3发布。

主要特性:

1、集成了HotSpot JVM

2、RMI支持兼容CORBA

3、JavaSound,支持音频片段播放

4、JNDI(Java Naming and Directory Interface)纳入核心库

5、Java Platform Debugger Architecture (JPDA),为调试Java代码提供了统一的API

6、新增复合代理类

  • Merlin(Java 1.4)

2002年2月6日,工程代号为Merlin灰背隼)的Java 1.4发布。

主要特性:

1、Assertion(断言功能)

2、正则表达式

3、XML处理

4、加密和安全套接字(SSL)

5、非阻塞IO(NIO)

6、日志功能

  • Tiger(version 1.5;Java SE 5)

2004年9月,工程代号为Tiger(老虎)的Java1.6发布。

主要特性:

1、泛型支持

2、自动装箱与拆箱

3、增强for循环

4、静态导入

5、注解和元数据

6、JVM改进

  • Mustang (version 1.6; Java SE 6)

2006年12月11日,工程号为Mustang(野马)的Java1.6发布。

主要特性:

1、web service技术

2、脚本

3、数据库

4、更多的桌面API支持(GUI)

5、监控和管理

6、编译期访问

7、桌面部署

8、安全处理

  • Dolphin (version 1.7; Java SE 7)

2011年7月28日,工程号为Dolphin(海豚)的Java1.7发布。

主要特性:

1、JVM对动态语言的支持

2、Java6中可用的64位压缩指针通过-XX:+UseCompressedOops设置

3、Switch支持字符串;try-with-resources;改进了泛型实例创建的类型推断;允许在数字字面值中使用下划线

4、并发工具集(JSR166)

5、New File I/O

6、Java 2D

7、增强了对新网络协议的库级支持

  • Spider (version 1.8; Java SE 8)

2014年3月18日,工程号为Spider(蜘蛛)的Java1.8发布。

主要特性:

1、lambda表达式

2、Annotation on Java Types

3、日期和时间调整

4、移除永久代

版本的特性后期可以更新一版详细的并配上最佳实践。

最后配上几个大佬的照片

Java之父

C语言创始人

C++创始人