结合到近期在做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. javascript ES 6 class 详解

    Introduction 上篇文章大致介绍了一些ES6的特性,以及如何在低版本浏览器中使用它们.本文是对class的详解. 译自Axel Rauschmayer的Classes in ECMAScri ...

  2. 前端之CSS字体和文本类属性

    一.字体类属性: 1.字体类型: font-family:字体1,字体2,字体3; 常用写法: font-family:"微软雅黑",Arial; 注:a) 多个字体之间用逗号分隔 ...

  3. Arduino中数据类型转换 int转换为char 亲测好使,itoa()函数

    由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实 ...

  4. cnblog之初来乍到

    hello,大家好,我是蓝斯老师 一枚致力于android开发的攻城狮 很荣幸能够在博客园开博(博主以前是混CSDN的,原博客地址http://blog.csdn.net/lancees) 希望将来能 ...

  5. Perl 输出内容到 excel

    可以参考:  http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm 使用Spre ...

  6. hihoCoder #1162 : 骨牌覆盖问题·三 (矩阵快速幂,DP)

    题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k<8,n<100000001) 思路: 由于k是比较小,但是又不那么小,可以专门构造这样的一个矩阵M,使得只要我们有一 ...

  7. 自学Spring Boot

    简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  8. Example of how to implement a view-based source list (NSOutlineView) using Cocoa Bindings

    You tagged this with the cocoa-bindings tag, so I assume you mean "with bindings." I whipp ...

  9. WPF中给Button加上图标和文字

    要实现在Button里面加入图标或者图形以及文字,我们就需要在Button里面用一个WrapPanel控件,这个WrapPanel控件会把我们的图标或者文字进行包裹,并显示出来. Xaml: < ...

  10. Java加腾讯云实现短信验证码功能

    一.概要 现如今在日常工作和生活中短信验证码对于我们来说是非常熟悉的,比较常见的注册账号或者交易支付时候,手机会收到一个短信验证码,我们可以通过验证码来有效验证身份,避免一些信息被盗. 验证身份 目前 ...