JAVA历史发展版本特点

学习目的

  1. 了解java语言的发展轨迹与版本特点
  2. 结合实际联系java各版本特点,展望java的未来发展

一.Java技术体系

  1. Java程序设计语言
  2. 各硬件平台(操作系统)的Java虚拟机实现
  3. Class文件格式
  4. Java类库API
  5. 第三方类库(来自商业或开源社区)

二.Java各发展版本

  1. 1991年:Oak语言(Java前身)产生,专注于在各电子产品上运行的程序架构,重点在电视机顶盒。
  2. 1995年:Java1.0发布
    口号Write Once,Run Anywhere,意为:"一次编译,处处运行"。
  3. 1996年:JDK1.0发布
  • 提供第一个纯解释执行的Java虚拟机实现(Sun Class VM)
  • 提供Java虚拟机、Applet(Java小程序)、AWT(java图形设计)等。
  1. 1997年:JDK1.1发布
  • 提供基础技术支撑点,如JAR文件格式、JDBC、JavaBeans、RMI(远程调用)等;
  • 语法增强点,如 Inner Class内部类、 Reflection反射等。
  1. 1998年:JDK1.2发布
  • 将Java技术体系拆分为面向桌面开发J2SE、面向企业开发J2EE、面向手机等移动终端开发J2ME等;
  • 提供基础技术支撑点,如EJB(J2EE规范)、Java Plug-in(运行时插件)、Java IDL(平台对象请求代理体系结构)、Swing等;
  • 第一次在java虚拟机中内置JIT(Just In Time)即时编译器;
  • 提供三款虚拟机:Classic VM,HotSpot VM,Exact VM;
  • 语法增强点,添加strictfp关键字;
  • 接口增强点,添加Collections集合类等。
  1. 1999年:HotSpot虚拟机诞生,在JDK1.3之后成为默认虚拟机

  2. 2000年:JDK1.3发布

  • API/接口增强点,添加了数学运算、Timer定时器接口等;
  • 新增JavaSound(声音)类库;
  • 添加 jar文件索引;
  • 将JNDI扩展服务 转变为 平台级基础服务。
  1. 2002年:JDK1.4发布(Java真正走向成熟的标志版本)
  • 提供新的技术特性,如正则表达式、异常链、NIO(同步非阻塞IO)、Imgae I/O(图片流)、日志类、XML解析器、XSTL(可扩展样式表转换语言)等;
  • 增加服务,新增Java打印服务、断言、Preferences(可以操作系统的高级功能)、支持IPV6等;
  • 更改JDBC 3.0(jdbc高级);
  • 竞争:微软.NET发布。
  1. 2004年:JDK5发布
  • 语法增强点,添加了自动装箱、泛型、动态注解、枚举、可变长参数(Object... args)、遍历循环(foreach循环)等;
  • 虚拟机改进,改进java内存模型(JMM)、新增元数据、提供java.util.concurrent并发包等。
  1. 2006年:JDK6发布
  • 改名,将J2EE、J2SE、J2ME改为Java EE、Java SE、Java ME等;
  • 技术增强点,提供 初步的动态语言支持(内置Mozilla JavaScript Rhino引擎实现)、编译期注解处理器、微型HTTP服务器API;
  • 语法增强,新增可插拔注解、Java Compiler (Java™ 编程语言编译器接口);
  • 服务增强,新增Java GSS(通用安全服务)、Kerberos( 安全认证)、 Web Services(web服务);
  • 虚拟机改进,增强了锁与同步、垃圾收集、类加载等;
  • 更改JDBC 4.0(jdbc高级);
  • Java在GPL v2协议下开源
  1. 2009年:JDK7发布
  • Sun公司(Java母公司)被Oracle公司收购;
  • 语法改进,switch支持字符串条件、泛型自动类型推断、动态语言支持、加减乘除安全机制、Map并发;
  • 虚拟机改进,提供新的G1收集器(垃圾收集器;
  • 技术增强:加强对非Java语言的调用支持、提供可并行的类加载架构;
  • 开始为Mac OS系统提供支持;
  • 对ARM指令集架构提供支持;
  1. 2014年:JDK8发布
  • 启用JEP(Java Enhancement Proposals):JDK增强建议;
  • JEP126,支持Lambda表达式,更加流畅的函数式表达语言;
  • JEP104,内置Nashorn JavaScript引擎的支持;
  • JEP150,提供新的时间、日期等API接口;
  • JEP122,彻底移除HoSpot虚拟机的永久代。
  1. 2017年:JDK9发布
  • 支持Jigsaw模块化功能;
  • 工具增强,如增强JS Shell、JLink、JHSDB等;
  • 整顿HotSpot各个模块原先各自为战的日志系统;
  • 支持HTTP2客户端API等;
  1. 2018年3月:JDK10发布
  • 内部重构:统一源仓库、统一垃圾收集器接口、统一即时编译器接口;
  • 引入新的Graal即时编译器,未来虚拟机无语言倾向,跨越所有语言的虚拟机
  • Java EE 改名 Jakarta EE。
  1. 2018年9月:JDK11发布,该版本为LTS长期支持版本
  • 提供新的垃圾收集器--ZGC收集器(革命性的一个收集器);
  • 将 类型推断 加入Lambda语法;
  • 两个版本JDK:OpenJDK(基于GPI v2 + CE协议,免费)、OracleJDK(基于OTN协议,个人免费)。
  1. 2019年2月:JDK12发布
  • OpenJDK 8 和 OpenJDK 11 从Oracle手交由RedHat管理和维护;
  • 提供新的Switch表达式、Java微测试套件等;
  • 加入RedHat开发的Shen-andoah垃圾收集器。
  1. 2019年9月:JDK13发布
  • 对switch表达式优化更新(表达式拥有返回值);
  • 文本块升级,包括html、sql、解释等;
  • java虚拟机增强,取消使用未使用的内存;
  1. 2020年3月:JDK14发布

三.JDK新特性

  1. 新特性概念
    JDK新特性指的是在JDK1.4版本标志着Java完全走向成熟之后,每次版本更新时新增或改进的功能特性,最大特点的即是目前常用的JDK1.5、JDK1.6、JDK8、JDK11、JDK13版本等。
  2. JEP(JDK增强建议)
    JEP全称Java Enhancement Proposals,意为JDK增强建议 / JDK版本更新建议。由JDK8版本开始,以后JDK每一版本的更新都以 JEP + 代号 来表示该版本新增的功能或改进的功能服务。

3.1 JDK1.5新特性

自动装箱拆箱
  • 自动装箱:支持将基本数据类型自动转换成包装类,Integer in = 123;
  • 自动拆箱:支持将包装类型自动转换成基本类型,int i = in;
泛型

引入泛型机制T<> ,通过给数组或者集合定义泛型,提前确定数组或集合中的元素类型(编译期提前检查元素类型),可以提前发现错误,且能消除强制类型转换;

metadata(元数据)

相当于"元注解",是用来描述数据的数据。通俗来讲是描述代码间的关系,或者描述代码与其他资源(如数据库表)之间内在联系的数据。
旧版元数据使用外部文件表示元数据JDK5之后采用标签形式<类似于注解>来表示元数据;

  • struts:struts-config.xml配置文件
  • hibernate:.hbm文件
  • EJB:ejb-jar.xml配置文件
ntrospector(内省)

内省指的是是Java对JavaBean类属性、事件的一种缺省处理方法。在计算机中,内省是指程序在运行时 检查对象类型的一种能力,内省通常也运行时类型检查(内省底层使用反射实现);

enum(枚举)

枚举类属于"替代"public static fianl常量的一个类,往枚举类中定义的实例变量只能是常量 且必须全部中文大写。

  • 枚举类中定义的变量不需要修饰符和类型,只需要大写的变量名即是常量
  • 枚举类也和普通类一样拥有方法,但是定义方法之前必须一定先有实例变量;
静态引入

import 导入的一种,普通导入表示去找哪一个类,到哪一个包下去找哪些被使用到的类。
静态导入使用的是import static,主要是导入指定类的某个静态成员变量、静态方法,或者导入指定类的所有静态成员变量、静态方法(import static 包名.*)。

可变长参数(Varargs)

可变参数指的是允许在方法的形参使用三个点 args... 表示该形式参数长度可变,即该形参的数量不确定。
但可变长度形参只允许定义一个,且必须只能定义在方法参数列表的最后一个(不允许多个args...出现在同一个方法参数列表中,也不允许args...比普通参数先出现)。
定义可变长度形参后增加3个点即(...);则表明该形参可以接受多个参数值,多个参数值会被当做数组传入。
可变长参数实际上还是属于一个数组对象,拥有下标且可以通过下标获取可变长参数的每一个参数

foreach(高级循环)

增强循环,通过数组或集合对象,可以快速遍历,提高效率(但是不能根据下标遍历获取元素);

JMM(内存模型)

java内存模型全称Java Memory Model,是java虚拟机规范定义的,用来屏蔽java程序在不同的硬件和操作系统 对内存的访问的差异。
JMM内存模型主要设计用于实现java程序在各种不同的平台上都能达到内存访问的一致性,避免程序在移植时因为硬件或操作系统的不同导致不可行、访问不通过等。

concurrent(并发包)

通过在java.util工具包下引入新的并发包(类库),支持Java本身的并发开发。引入concurrent包是java支持高并发的一个体现。

3.2 JDK6新特性

命名方式变更

命名方式变更指的是Java产品路线命名的变更。
J2EE更名为Java EE,java企业版平台;
J2SE更名为Java SE,java标准版平台;
J2ME更名为Java ME,java微缩版平台。

脚本语言
编译API和微型HTTP服务器API
锁与同步
垃圾收集
类加载
JDBC 4.0(jdbc高级)
Java Compiler (Java™ 编程语言编译器的接口)
可插拔注解
Native PKI(公钥基础设)
Java GSS(通用安全服务)
Kerberos( 一种安全认证的系统)
LDAP(LDAP)
Web Services (web服务)

3.3 JDK8新特性

Lambda表达式
改进的类型推断
Java类型的注释
重复注释
方法参数反射
TLS 1.1和TLS 1.2默认启用
有限的doPrivileged
基于密码加密的更强算法
JSSE服务器中的SSL / TLS服务器名称指示(SNI)扩展支持
支持AEAD算法
KeyStore增强功能
SHA-224消息摘要
对NSA Suite B加密的增强支持
对于高熵随机数生成更好的支持
新PKIXRevocationChecker类
适用于Windows的64位PKCS11
Kerberos中的新rcache类型5重放缓存
协议转换和约束委派的Kerberos 5
默认情况下禁用弱加密**
GSS-API / Kerberos 5机制的未绑定SASL
用于多个主机名的SASL服务
JNI桥接到Mac OS X上的本机JGSS
在SunJSSE提供程序中支持更强大的临时DH密钥
支持JSSE中的密码套件首选项自定义
全新的JavaFX
java工具的操作增强
Unicode增强功能,包括对Unicode 6.2.0的支持
采用Unicode CLDR数据和java.locale.providers系统属性
新日历和区域设置API
引入新的Date Time API
Nashorn JavaScript引擎
并行阵列排序
标准编码和解码Base64
无符号算术支持
新的并发
Java XML技术增强功能
虚拟机操作增强

3.4 JDK11新特性

JEP 181: Nest-Based Access Control
JEP 309: Dynamic Class-File Constants
JEP 315: Improve Aarch64 Intrinsics
JEP 318: Epsilon: A No-Op Garbage Collector
JEP 320: Remove the Java EE and CORBA Modules
JEP 321: HTTP Client (Standard)
JEP 323: Local-Variable Syntax for Lambda Parameters
JEP 324: Key Agreement with Curve25519 and Curve448
JEP 327: Unicode 10
JEP 328: Flight Recorder
JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms
JEP 330: Launch Single-File Source-Code Programs
JEP 331: Low-Overhead Heap Profiling
JEP 332: Transport Layer Security (TLS) 1.3
JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
JEP 335: Deprecate the Nashorn JavaScript Engine
JEP 336: Deprecate the Pack200 Tools and API

3.5 JDK13新特性

switch优化更新(预览版)
文本块升级
动态CDS档案
取消使用未使用的内存
重新实现旧版套接字API
FileSystems.newFileSystem新方法
nio新方法
核心库/ java.time
核心库/ java.util中:I18N
热点/ GC
安全库/ java.security
删除功能

3.6 JDK14新特性

Switch(最终版)
垃圾回收器(更新优化)
Record(预览功能)
货币格式(优化)
NIO的Channel通道
删除功能
instanceof的模式匹配(预览版)
弃用功能
注意点
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容