JDK10特性
一、JAVA10概述
2018年3月21日, Oracle官方宣布JAVA10正式发布
JAVA9和java10 都不是 LTS (Long-Term-Support)版本.和过去的JAVA大版本升级不同,这两个只有半年左右的开发和维护时间. 而JAVA11 也是就是18.9,才是JAVA之后的第一个长期支持版本
JAVA10 一共定义了109个新特性,其中包含JEP,对程序员来说,真正的新特性也就一个,还有一些新的API和JVM规范以及JAVA语言规范上的改动.
JAVA10 的12个JEP (JDK Enhancement Proposal特性加强协议) ,可参阅官方文档http://openjdk.java.net/projects/jdk/10/
具体的新增特性:
286: 局部变量类型推断
296: JDK库合并
304: 统一的垃圾回收接口
307:为G1提供并行的Full GC
310:应用程序类数据共享
312: ThreadLocal握手交互
313: 移除JDK中附带的javah工具
314: 使用附加的Unicode语言标记拓展
316:能将对内存占用分配给用户指定的备用内存设备
317:使用基于JAVA的JIT编译器
319: 根证书
322:基于时间的发布版本
二、语法层次的变化
1. 局部变量的类型推断
局部变量的显示类型声明,常常认为是不必须的,给一个好听的名字经常可以很清楚的表达出下面应该怎样继续.减少了啰嗦和形式的代码,避免了信息的冗余,而且对齐了变量名,容易阅读。
作为JAVA程序员,在声明一个变量时,我们一般都是书写两次变量类型,第一次用于声明变量类型,第二次用于构造器
List<String> list =new ArrayList<>();
变量的声明类型书写复杂且较长,尤其是加上泛型的使用
Iterator<Map.Entry<Integer,Student>> iterator=set.iterator();
我们也经常声明一种变量,它只被使用一次,并且是在下一行代码中:
URL url=new URL("http://www.boge.com");
URLConnection connection= url.openConnection();
Reader reader =new BufferedReader(new InputStreamReader(connection.getInputStream));
总之: 变量标识符(变量名)就可以让我清楚的知道变量如何使用,没必要前面加上一大串的类型声明
局部变量推断有点类似JavaScript中的弱变量类型的写法,通过后面的数据来推断前面的数据类型,数据类型的声明统一为var.
2. 不能使用类型推断的场景
在有些情况下我们是不能使用类型推断的。具体有如下的场景
2.1 变量的声明
变量的声明不能使用类型推断,因为无法推断
// 根据右边的数据推断类型,不赋值压根没给推断的机会,