Java这门语言有很多不可忽视的优点,比如一次编写到处运行,又比如它有一个相对安全的内存管理和访问机制,避免了C++中经常出现的内存泄露和指针越界问题等等,java带来的这些好处,让我们这些java程序员与生俱来就站在了“巨人的肩膀”上,之前一直无痛无痒地讲java的技术点,从来没对这门语言的历史进行科普,毕竟我们不能只知“其然”,不知其“所以然”,我们应该思考一下java技术体系中这些技术特性是如何实现的,认识特性运作的本质,在写每一句程序的时候都能思考一下“程序这样写好不好”。

今天主要是科普一下Java的历史,重新认识认识和咱们并肩作战的兄嘚是如何从娘胎诞生的。

Java的体系

如果说java的体系,其实java的涵盖范围十分广泛,并不是咱们侠义上理解的java程序设计这一分支,Clojure,JRuby,Groovy这些需要运行在java虚拟机上的语言和程序框架都数据java体系的一部分,从官方给出的文档来看,Java的技术体系主要包括 : java程序设计语言(我们平时写的java代码),java虚拟机(任何平台上的),Class文件格式javaAPI类库,以及商业或者开源提供的第三方类库。


我们学习java的第一课,就是如何配置java的环境,也就是安装部署JDK,其实这里的JDK具体有哪些东西,博主初学的时候也是很含糊,说不明白,事实上,Java程序语言、Java虚拟机、JavaApi类库三者加起来才是JDK,JDK是支持你本地运行java的最小环境。说到JDK的安装部署,经常配JDK环境的朋友肯定在其目录下发现有个JRE的目录,其实JRE也是这个体系中的一部分,JRE是由JavaAPi类库的SE部分和Java虚拟机组成,也就是说我们可以理解为JRE是JDK的一部分。

学习Java的时候我们会经常遇到什么JavaSE,J2EE……初学的时候可能因为不细心或者材料的不健全,对这部分很困惑,其实这里的SE,EE等都是对Java按技术服务的领域来划分的,白话就是,Java主要用来做什么,根据Java能用来做什么,又可以分为 :

Java Card:支持一些简单的java小程序,主要工作在小内存设备中(智能卡,机顶盒),可以理解为嵌入硬件的一种程序,这也是大胡子创造Java的开始。

Java ME:支持Java运行在移动终端,简单来说目前的手机操作系统,安卓就是该体系支撑。

Java SE: 这里就是面向终端的桌面应用了,我们常用的桌面软件(例如Winows下的应用),如果采用Java来写,就需要Java的SE体系,这个体系又叫J2SE。

Java EE:支持使用更为复杂的多层次架构,多用作企业级应用的开发,Web开发,简单来说,部署在服务器上的服务级别的应用,这个体系又叫J2EE。这个   体系是目前Java应用最为广泛的。

Java的发展史

这里主要围绕JDK版本的时间线开始,截至于JDK1.7版本,后续的1.8+后面的时,大家作为Java程序员应该不需要过多口水了。

1991年4月,大胡子詹姆斯(James Gosling)开启了一个绿色计划,这项计划的目的是开发一种能在电子产品上(机顶盒、冰箱、收音机等)运行的程序架构,这个计划的成果就是一个叫Oak的语言,可是大胡子的这个Oak在当时并不怎么火爆,市场并没给出多大的反馈,于是就这么不温不火地放着,也可能是命,注定让大胡子的这个东西要站在浪头,于是,沉寂了几个月的Oak,随着1995年互联网浪潮的兴起,找到了适合自己的成王之路。

1995年5月23日,Oak语言改名为Java,并在Sun公司的世界大会上发布了1.0版本,即Java 1.0,也是这个时候,Java提出了 “一次编写,到处运行”的口号,也标识着Java开始从新手村走出。

1996年对算是Java的起飞年,1月23日,JDK1.0的发布,标志着Java语言有了第一个正式版本的运行环境,JDK1.0中提供了一个纯解释执行的Java虚拟机实现(其中的代表技术有:Java虚拟机,Applet,AWT等),同年4月,10个主要的操作系统供应商声明将在自己的产品 中嵌入Java技术(截至同年9月,已经有8万多网页是采用Java来制作的),5月底,Sun公司在旧金山举办了第一届JavaOne大会,从此JavaOne就成了全世界百万Java开发者每年一度的技术盛宴。

1997年,Sun公司发布了JDK1.1,这一版本提供了对Java技术的一些最基础的支撑,同时Java的语法也有了一定的发展,如内部类和反射都是这一版本中出现的,到1999年4月,JDK1.1一共发部了1.1.0——1.1.8九个版本,每个版本都有自己独特的名字,例如:JDK1.1.4-Sparkler叫做宝石,JDK1.1.5-Pumpkin 南瓜,JDK1.1.7布鲁图等(这里插一句个话,感觉越是这种很NB的东西起的名字越随意,很俏皮,里面或是有研发者们自己的小心思,或是有很多和研发者切割不断的联系,毕竟就是人家的脑力劳动的结晶,命名权就该归为研发人员本身,而不是被官大一级的起名XXX系统)。

1998年12月,JDK迎来了里程碑式的一个版本,即JDK1.2,也就是这一版本开始,Java划分了三大体系,即上面列出的ME,SE,EE。也许正是因为开始了划分,希望各个体系百花齐放,于是JDK1.2的工程代号PlayGround,译为竞技场。也就是这一版本中,Java除了虚拟机上内置了JIT编译器之外,还追加了我们现在常用的Collections集合类.

1999年4月27日,HotSport虚拟机发布,这是由一家叫做 “Longview Technologies”的小公司开发,因为这一虚拟机的性能很优异,这家小公司就被Sun收购(小公司也是可以好好搞技术的!!!搞好了大不了被收购嘛),HotSport是最为JDK1.2的附加程序提供的,但是在后来的1.3以及后续的JDK中,都被Sun公司指定为默认虚拟机。

2000年5月,代号为Kestrel(美洲红隼)的JDK1.3发部,这一版本主要对JDK1.2的类库进行扩充,提供了大量的新的Java 2D API,自从1.3发部以后,Sun维持了一个习惯,大约每隔两年发部一个JDK的主版本,而且命名均以动物命名,期间发布的各个修正版本则以昆虫名作为工程代号。

2002年,JDK1.4发部,工程代号为Merlin(灰背隼),这个版本是Java真正走向成熟的一个版本,SAS,IBM,Symbian等著名公司都参与甚至实现自家独立的JDK1.4,哪怕今天,仍然很多主流应用(Spring,Struts等)能直接运行在JDK1.4之上,或者继续发布能运行在JDK1.4版本上的版本,JDK1.4中追加了很多新的技术特性,例如正则表达式,日志类,XML解析器、异常链等等。

 2004年9月30日,JDK1.5发部,JDK从1.5开始,官方在文档中已经不再使用JDK1.5的命名,只有程序员在内部使用的开发版本号(例如在cmd中 java -version输出)中才会看见1.5,1.6这样的版本号,而公开版本号则变成了JDK5、JDK6、JDK8这种命名方式(这里应该会解开很多朋友在装JDK时的一个困惑,为什么有人说JDK几,有人说JDK1.1.X)。话回正题,JDK1.5在java语法上有了很大的改进,例如自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法都是在JDK1.5中被加入,同时这个版本改进Java的内存模型,提供了并发包(java.util.concurrent)等。

2006年12月,JDK1.6发布,代号Mustang(野马),这个版本中,Sun结束了子JDK1.2开始的J2EE、J2SE、J2ME的命名方式,启用 Java SE6,Java EE6、java ME6的命名方式,语法上也做了改进,主要为:提供了动态语言机制(通过内置Mozilla JavaScript Rhino引擎),提供了编译API和微型HTTP服务器API等,对Java虚拟机内部也进行了改进,包括锁与同步,垃圾回收机制、类加载等等

在2006年11月13日的Java One大会上,Sun公司宣布Java最终会开源,并在随后的一年时间内,陆续将JDK不同版本的代码发部到网络上,于是,就有了OpenJDK。自JDK1.6发布以后,随着代码的开源,Java的生态变得十分繁荣,代码的复杂性也急剧增加,由于开发JavaFx、经济危机以及Sun的收购等,Sun在JDK的发展上消耗了过高的资源,导致JDK的更新没有再维持两年一更的速度。

2009年2月份,工程代号为Dolphin(海豚)的JDK1.7完成了其第一个里程碑版本,(根据JDK1.7的规划,一共有10个里程碑,当然后续我们已经使用到了)。

2009年4月20日,Oracle公司正式宣布以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有(本质上java语言不属于哪家公司所有,它由JCP组织进行管理,尽管JCP组织的老大是Sun和Oracle),Oracle公司在完成Sun公司的收购之后,分别从BEA和Sun中取得了三大商业虚拟机的其中两个:JRockit和HotSpot,Oracle将这两个虚拟机相互取长补短,最终合二为一。

简单聊一聊Java的历史的更多相关文章

  1. 越来越“简单”的Java

    Java,20岁了.从我写下第一行Java代码,迄今已有十余年了,眼见Java——这个当年刚刚找到自己成长方向的懵懂少年,成长为如今当之无愧的业界王者.它已拥有世界上最庞大的开发者社区,以及无可匹敌的 ...

  2. Java的历史和大事记

    Java的历史 在上世纪90 年代初,sun 公司有一个叫做Green 的项目,目的是为家用消费电子产品开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流.詹姆斯·高斯林(Jam ...

  3. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  4. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  5. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  6. 三、使用Maven构建简单的java项目

    前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse     2.apache-maven-3.3.9   3. ...

  7. JNI_最简单的Java调用C/C++代码

    JNI_最简单的Java调用C/C++代码 JNI.是Java Native Interface的简称,中文是"Java本地调用".通过这种技术能够做到下面两点: Java程序中的 ...

  8. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  9. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  10. Java学习笔记 11/15:一个简单的JAVA例子

    首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java   // TestJava.java,java 的简单范例  public ...

随机推荐

  1. HTTP长连接和短链接代理与网关

    长连接和短链接 代理与网关 HTTP/)服务器端网关:网关与客户端使用HTTP协议通信,使用其他协议与服务端通信 (/HTTP)客户端网关:网关与客户端使用其他协议通信,使用HTTP协议与服务端通信 ...

  2. Zookeeper解决了什么问题?

    在公司中用到了zookeeper协调分布式系统,在这里记录下. (一). 首先是什么? 是一种适用于分布式应用程序的高性能协调服务.它在一个简单的界面中公开常见服务(如命名.配置管理.同步和组服务), ...

  3. #树套树,二维线段树#HDU 4819 Mosaic

    题目 多组数据,给定一个\(n*n\)的矩阵(\(n\leq 80,a_{i,j}\leq 10^9\)) 多组询问一个以\((x,y)\)为中心,边长为\(L\)的子矩阵最大值\(mx\)和最小值\ ...

  4. 轻松上手Jackjson(珍藏版)

    写在前面 虽然现在市面上有很多优秀的json解析库,但 Spring默认采用Jackson解析Json. 本文将通过一系列通俗易懂的代码示例,带你逐步掌握 Jackson 的基础用法.进阶技巧以及在实 ...

  5. 拥抱开源更省钱「GitHub 热点速览」

    免费.低成本.自托管.开源替代品...这些词就是本周的热门开源项目的关键字.常见的 AI 提升图片分辨率的工具,大多是在线服务或者调用接口的客户端,而「Upscaler」是一款下载即用的免费 AI 图 ...

  6. KL散度和交叉熵的对比介绍

    KL散度(Kullback-Leibler Divergence)和交叉熵(Cross Entropy)是在机器学习中广泛使用的概念.这两者都用于比较两个概率分布之间的相似性,但在一些方面,它们也有所 ...

  7. Apollo在有赞的实践

    Apollo在有赞的实践 原创 有赞技术 有赞coder 2020-02-14 .. 作者:俞柯 & 张正 团队:有赞云 一. 背景和Apollo简介 在集中式开发时代,配置文件基本足够用了, ...

  8. sql 语句系列(两个日期之间)[八百章之第十七章]

    前言 进入了日期章了. 年月日加减法 分别对原有的日期进行加减法. sql server select DATEADD(DAY,-5,HIREDATE) as hd_mimus_5D, DATEADD ...

  9. Flask搭建APP统一管理平台

    主页效果: 1.从数据库中获取所有APP的信息,每个卡片上展示APP名称.bundle id.版本构建历史记录,系统类型等构建信息 2.支持查询筛选,模糊查询 3.点击历史记录跳转APP历史记录详情页 ...

  10. 【git】ignore文件详解

    1.功能 可以指定git,对于某些文件或者文件夹不进行追踪记录,例如一些依赖或者编译中间文件等. 2.使用注意 2.1 对于已经有提交记录的文件 对于已经提交的文件,即使加入了ignore文件也会被g ...