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. #模型转换#洛谷 6075 [JSOI2015]子集选取

    题目 分析 \(n\)个元素可以独立操作,考虑单个元素, 则选不选择一定有一道分界线, 而这条分界线正好要走\(k\)次, 每次可以选择向上走或向右走,所以为\(2^k\), 由于\(n\)个元素相互 ...

  2. TVM 代码生成—TIR to LLVM IR

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17573212.html TVM在编译过程中,经历了 graph LR A[3rd IR] --> B[R ...

  3. 鸿蒙HarmonyOS实战-ArkUI组件(TextInput/TextArea)

    一.TextInput/TextArea TextInput和TextArea组件通常用于收集用户输入的文本数据. TextInput组件通常用于单行文本的输入,它允许用户通过一个光标来输入文字,并支 ...

  4. 持续构建行业影响力|HarmonyOS SDK荣膺年度“技术卓越”奖项

    自2023年9月华为宣布鸿蒙原生应用全面启动以来,HarmonyOS SDK通过将HarmonyOS系统级能力对外开放,支撑开发者高效打造更纯净.更智能.更精致.更易用的鸿蒙原生应用,和开发者共同成长 ...

  5. C++调用Python-2:调用Python函数,返回数字

    # mytest.py def hello(): print("this is test python print hello world") return 123 #includ ...

  6. HUAWEI AppGallery Connect全新升级,支持HarmonyOS生态全生命周期服务!

     原文:https://mp.weixin.qq.com/s/7aNIplUBdm_D1yyiMrQdAw,点击链接查看更多技术内容.     HUAWEI AppGallery Connect全新升 ...

  7. 如何解决python安装mysqlclient失败问题

    在使用Django等框架来操作MySQL时,实际上底层还是通过Python来操作的,首先需要安装一个驱动程序,在Python3中,驱动程序有多种选择,比如有pymysql以及mysqlclient等. ...

  8. 精通中间件测试:Asp.Net Core实战指南,提升应用稳定性和可靠性

    引言 在上一章节我们实战了在Asp.Net Core中的项目实战,这一章节讲解一下如何测试Asp.Net Core的中间件. TestServer 还记得我们在集成测试中提供的TestServer吗? ...

  9. oracle表名、字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长)

    oracle表名.字段名等对象的命名长度限制(报错:ORA-00972: 标识符过长) 简单来说,出现了ORA-00972: 标识符过长的错误 找来找去发现是自己的中间表名太长导致的 Oracle数据 ...

  10. 云原生消息、事件、流超融合平台——RocketMQ 5.0 初探

    简介: 今天分享的主题是云原生消息事件流超融合平台 RocketMQ 5.0 初探,内容主要分为三个部分: 首先,带大家回顾业务消息领域首选 RocketMQ 4 发展历史以及 4.x 版本的演进与发 ...