最全的Java版本历史

JDK 1.0(1996)

Sun公司发布Java1.0,发布初期叫Oak,后改名为Java(JDK1.0基本上只支持Java语言基础特性)

JDK 1.1(1997)

  • 引入内部类
  • 引入JDBC: 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。
  • 引入RMI:Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
  • 引入JavaBeans:Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
  • 支持反射能力
  • 支持国际化和Unicode

J2SE 1.2(1998)

  • Java技术体系拆分为:J2SE、J2EE、J2ME
  • 引入JIT:即时编译,又译及时编译、实时编译,动态编译的一种形式,是一种提高程序运行效率的方法。通常,程序有两种运行方式:静态编译与动态直译。静态编译的程序在执行前全部被翻译为机器码,而直译执行的则是一句一句边运行边翻译。
  • 引入EJB技术
  • 引入Swing图像化API
  • Java plug-in(Java Applet):Web环境下的小程序
  • 引入集合框架
    在这里插入图片描述

J2SE 1.3(2000)

  • 初次引入 HotSpot VM
  • Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI)包含在主程序库中(先前为扩展组件的形式)
  • 用于实现动态代理的类

J2SE 1.4(2002)

  • 语言上的改变:assert 关键字(断言)
  • 正则表达式
  • 异常链,允许一个异常来封装原先处于较低级别的异常
  • 支持 Internet Protocol version 6(IPv6)
  • 非阻塞I/O(NIO)
  • 新增 日志API

J2SE 5.0(2004)

  • 泛型: 为集合提供编译期间 (静态) 类型安全,且不须为大多数类型转换 (类型转换) (规范在 JSR 14)
  • 元数据(MetaData): 也称作注解。让语言结构(像是类别和方法)能够用额外的数据标记,可以由元数据意识工具处理(规范在 JSR 175)
  • 枚举
  • 自动装箱拆箱:基本数据类型如int与Integer之间能够自动转换
  • 静态导入(import static)
  • 可变参数
  • JUC
  • For-Each 循环
  • Scanner 类别来解析来自各式各样的输入和缓冲
public class Jdk5Demo{
	
	public static void mian(String[] args){
		String[] values = of("hello","world");
		Integer[] data = of(1,2,3,4,5);
	
	}

	private static <T> T[] of(T... values){
		return values;
	}

	private static <T> T[] ofOne(T one, T... others){
		return others;
	}
}
	

JavaSE 6(2006)

  • 引入垃圾回收G1
  • 优化锁与同步、垃圾收集、类加载等
  • @Override 接口
public class Jdk6Demo extends Object{
	
	public static void mian(String[] args){
	
	}

	@Override
	public String toString(){
		return super.toString();
	}
	
	public interface EchoService{
		@Deprecated(since = "1.1")
		String echo(String message);
	
		String echo(String message,String... others);
	}

	public class EchoServiceImpl implements EchoService{
		//1.1 remove @Override
		String echo(String message){
			return null;
		}
		
		@Override
		String echo(String message,String... others){
			return null;
		}
	}
}
//@Override 正常来说要作为重写的注解加在重写的方法上,但有时候就为了区分版本 如上就是从1.1版本要删除了就不应该在加上该注解 

JavaSE 7(2011)

sun被Oracle收购

  • 钻石语法(泛型实例化类型自动推断)
  • try-with-resources语法糖
  • 多个catch块用|连接
  • switch中可以使用字符串
  • 支持动态语言
  • 64位JDK的指针压缩
  • 数值可加下划线
public class Jdk7Demo {
	
	public static void mian(String[] args){
		try(FileInputStream inputStream = new FileInputStream("D:/a.txt")){

			//AutoCloseable since 1.7
			//JDBC Connection ,InputStream,用 try-with-resources的语法

		}catch(FileNotFoundException | RuntimeException e ){
			e.printStackTrace();
		}
	}

}
	

JavaSE 8(2014 LTS)

  • Lambda表达式(闭包,允许我们将函数当成参数传递给某个方法)
  • 接口中的默认方法和静态方法
  • 方法引用
    • 无参构造器方法引用:类名::new 或者 Class::new
    • 静态方法引用:Class::static_method (接受一个Class类型参数)
    • 类成员方法引用:Class::method (没有参数)
    • 实例成员方法引用:instance::method (接受一个instance对应类型的参数)
  • 重复注解(同一个地方可以重复使用多次同一个注解,注解本身需要被@Repeatable修饰)
  • 升级工具库实现
    • HashMap实现修改、ConCurrentHashMap实现修改
    • 新增Stream API(java.util.stream)
    • 新增Optional类以解决空指针问题
  • 工具包,类依赖分析工具 jdeps
  • JVM方面:使用Metaspace(JEP122)代替方法区持久带(PermGen space)

JavaSE 9(2017)

JSR 376:在Jigsaw项目中将JDK模块化(参见Java平台模块系统条目)
JEP 222:jshell:Java Shell(一个 Java 交互式顶层构件)
JEP 295:AOT编译(通过 Graal VM 实现)[240]
JEP 268:XML Catalogs
JEP 266:更多的并发更新。包含响应式流的Java实现,及其部分替代品java.util.concurrent.Flow。
JEP 193:变量句柄:定义一个标准方法来调用java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。
JEP 282:jlink:Java链接器。该工具可以为模块生成一个包含了其所有依赖项的自定义运行时映像,同时允许生成一个包括运行它的JVM的可执行文件。
JavaDB被移出JDK
JEP 263:高DPI图像:自动缩放与尺寸自适应。

JavaSE 10 (2018.3)

JEP 286:局部变量类型推断
JEP 317:实验性的基于Java的JIT编译器。这是 Linux x64 下 Graal 动态编译器的集成。
JEP 310:应用程序类级别数据共享
JEP 322:基于时间的版本命名
JEP 307:适用于G1的多线程完全垃圾回收
JEP 304:垃圾回收器接口
JEP 314:更多的Unicode语言标签扩展
JEP 319:内置根证书
JEP 312:线程本地握手
JEP 316:在可选的内存设备上申请堆内存空间
JEP 313:删除本地代码头文件生成器javah
JEP 296:将所有JDK分支集成到同一个版本库中

var a = new ArrayList<>();

JavaSE 11 (2018.9 LTS)

JEP 309:动态类文件常量
JEP 318:Epsilon:无操作垃圾收集器
JEP 323:lambda参数的局部变量语法
JEP 331:低开销堆分析
JEP 321:HTTP Client
JEP 332:支持 TLS 1.3
JEP 328:添加Java飞行记录器(JFR),其用于创建性能分析记录
JEP 333:添加ZGC(一个可扩展的低延迟垃圾收集器)
JavaFX、Java EE、CORBA 被移出 JDK
JEP 335:弃用 Nashorn JavaScript 引擎

JavaSE 12(2019.3)

JEP 189:Shenandoah:一个实验性的低延迟垃圾收集器
JEP 230:细粒度性能评审包
JEP 325:Switch 表达式(预览阶段)
JEP 334:JVM Constants API
JEP 340:仅保留一个 AArch64 平台的移植
JEP 341:默认类数据共享归档
JEP 344:针对G1,提供可中止的混合垃圾收集
JEP 346:针对G1,及时释放已申请但未使用的内存

Java类库提升

Java5 Java6 Java7 Java8 Java9 Java10
并发框架(J.U.C) JDBC 4.0 NIO 2 Stream API Reactive Streams Flow API Java-Based JIT Compiler
格式化(Fomatter) JAXB 2.0 Fork/Join框架 CompletableFuture Process API Updates
Java管理扩展(JMX) 可插拔注解处理AP Iinvokedynamic字节码 Annotation on Java Types Variable Handles
Instrumentation Common Annotations Date and Time API Method Handles
XML处理(DOM、SAX、XPath、XSTL) Java Compiler Api 可复制Annotations Spin-Wait Hints
Scripting in JVM JavaScript运行时 Stack-Walking API

参考百科:维基百科

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章