结合到近期在做springboot框架开发遇到的关于jdk版本的问题,本篇博客,主要介绍一下java的发展历史,侧重纯文介绍每个版本的特性。——主要从理论上做个宏观的了解,不做具体的技术研究讨论!

一、宏观图形说明

1.1,开发不常用版本

java1.0:1996年1月23日,jdk1.0发布!提供的服务:一个纯解释执行的java虚拟机实现(sun classic VM),其代表技术:java虚拟机、applet 和awt (Abstract Window Toolkit)等!

java1.1:1997年2月19日,jdk1.1发布!代表技术:jar文件格式、JDBC、javabeans、RMI。  在同时,java语法也有一定的发展:inner class、reflection等

java1.2:1998年12月4日,jdk1.2发布(里程碑意义的一个版本),工程代号:playground! 在这个版本中,java技术体系被拆分为3个方向:面向桌面应用开发J2SE(java 2 platform,standard edition)、面向企业级开发J2EE(java 2 platform,enterprise edition)、面向手机等移动开发J2ME(java 2 platform,micro
edition),其代表技术:ejb、java plug-in、java IDL、Swing

注意:

1,在这个版本中,java虚拟机第一次内置了jit(just in time)编译器

2,在语言和API级别上,java添加了strictfp关键字,以及现在java编码常用的一系列collections集合类

java1.3:2000年5月8日,jdk1.3,发布,代号Kestrel,它的改进,主要体现在类库服务。首先:JNDI开始被作为一项平台级服务提供(以前是扩展),使用CORBA IIOP来实现RMI通讯协议,添加javasound类库等。

java1.4:2002年2月13日,jdk1.4发布,代号Merlin,这是java走向成熟的一个版本,提供的新技术代表:正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等

1.2,开发常用版本

从java1.4,java开始走向成熟,在项目开发中,比较常用的,是1.4之后的版本,包括被Oracle公司收购后,最新发布的1.8。

java1.5:2004年9月30日,java1.5发布,工程代号tiger,这个版本,相对于前些版本主要在技术层面进行改进而言,它更多的是在语法上做出了非常大的改进。比如:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环等。在虚拟机和API层面,这个版本改进了java的内存模型(java memory model,JMM)、提供了java。util.concurrent并发包等。

注意:从1.5开始,官方的正式文档和宣传中,不再使用jdk1.5类似的命名,而直接使用jdk5的形式命名,即product version。

java6:2006年12月11日,jdk1.6发布,工程代号Mustang,从这个版本开始,sun终结了jdk1.2开始已经有8年历史的J2EE等三种命名方式,启用java SE6等三种命名方式。改进内容包括:提供动态语言支持、提供编译API和微型HTTP服务器API。同时,这个版本对java虚拟机做了很大改进,包括:锁与同步、垃圾收集、类加载等!

java7:2009年2月19日,工程代号为Dolphin的jdk1.7完成了第一个里程碑版本(按照1.7的规划,一共有10个里程碑,最后一个于10年9月9日结束,1.7于11年7月28日官方宣布退出),1.7提供的改进有:提供新的GI收集器、加强对非java语言的调用,语言级的模块化支持、升级类加载架构等。PS:09年4月20,Oracle收购sun公司,java商标从此归Oracle所有,在之前java语言由JCP组织进行管理。

在java7中,Oracle宣布会把不能按时完成的Lambda、jigsaw和部分coin放入jdk1.8中,所以:

java8:2014年3月19日,jdk1.8发布,在这一版本里面,jigsaw(标准模块系统)被划入java9。它的新特性有:使用Lambda表达式、泛型接口改进、引入函数式接口、streams编程等!

二、总结

所以,从java的演变历史来看,我上次没有弄好那个springboot的框架,真心不是由于java8版本太高的原因。那么,我就在想,有时候在项目中遇到问题,确实是通过改变jdk版本来解决问题,那么这些情况是什么情况呢?因为从原理上来说,每个版本都是在原有版本的基础上,做的一些列改进,而并没有停止对某一项服务技术的支持。

我个人初步的结论是:

正如Lambda表达式,是在1.8后才支持,如果在代码中是用了Lambda表达式,毫无疑问,至少升级上1.8。同理可证,在新版本中,对于同一个类库的支持形式有所不同(java的版本变更都是在改错和提供新服务),那么原则上说只要改变语法符合当前配置jdk版本,是不需要降下jdk版本去改错的。

一般来说,软件版本都是向下兼容,比如:word2013可以打开2007,但2007不一定能打开word2013的文件。那么对应到jdk,如果视图用低版本的jdk去编译使用高版本支持的代码,就会出错。为了更好的将软件进行移植,采用功能符合要求且版本 较低的jdk,是一个不错的选择。

【java基础 6】java的发展史简介的更多相关文章

  1. Java基础-二进制以及字符编码简介

    Java基础-二进制以及字符编码简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必计算机毕业的小伙伴或是从事IT的技术人员都知道数据存储都是以二进制的数字存储到硬盘的.从事开 ...

  2. Java基础-日期格式化DateFormat类简介

    Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...

  3. java基础-学java util类库总结

    JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...

  4. 黑马程序员:Java基础总结----java注解

    黑马程序员:Java基础总结 java注解   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...

  5. Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...

  6. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  7. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  8. Java基础技术-Java其他主题【面试】

    Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...

  9. Java基础(一):简介

    一.java基础语法: 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  10. Java基础学习-Java语言概述

    一.Java语言发展史 创始人:詹姆斯·高斯林(James Gosling) 公司:SUN——(Stanford University Network斯坦福大学网络公司) 1995年5月23日,Jav ...

随机推荐

  1. go实现生产者消费者

    package main import ( "fmt" "math/rand" ) func main() { ch := make(chan int) don ...

  2. MVC dropdownlist 后端设置select属性后前端依然不能默认选中的解决方法

    -----------------------------------来自网上的解决方法--------------------------------------------- ASP.Net MV ...

  3. centos 7 安装JDK (Linux安装jdk)

    centos 7安装JDK (Linux安装jdk) 第一部分 首先查看centos 7是否有openjdk,如没有就跳过第一部分,直接第二部分. [master@bogon ~]$ java -ve ...

  4. Mysql的Root密码忘记,查看或修改的解决方法

    Mysql的Root密码忘记,查看或修改的解决方法:1.首先启动命令行2.在命令行运行:taskkill /f /im mysqld-nt.exe3.继续在命令行运行:mysqld-nt --skip ...

  5. Caused by: java.lang.ClassNotFoundException: org.springframework.boot.system.JavaVersion

    Caused by: java.lang.ClassNotFoundException: org.springframework.boot.system.JavaVersion Invalid pro ...

  6. [转]八款开源Android游戏引擎

    八款开源Android游戏引擎 1.Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根 ...

  7. 51nod 1276 1276 岛屿的数量 (很好玩的题目

    题意: 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有 ...

  8. Makefile入门教程

    Makefile介绍 make是一个命令工具,它解释Makefile 中的指令(应该说是规则).在Makefile文件中描述了整个工程所有文件的编译顺序.编译规则.Makefile 有自己的书写格式. ...

  9. VS打包软件部署------ClickOnce应用安装 (各版本.net引导文件安装,再发布文档离线安装下载地址)

    一.1.其他引导程序包:地址  https://msdn.microsoft.com/zh-cn/vstudio/bb898654.aspx 2.离线安装各版本.net下载版(各种语言):https: ...

  10. 利用VS自带的命令行工具查看和生产PublicKeyToken

    使用VS2008(或其他版本)命令行工具,键入:SN -T C:\*****.dll 就会显示出该dll具体的PublicKeyToken数值. 如果该程序集没有强命 名,则不会有PublicKeyT ...