从Java 10 开始,Java的迭代周期缩短为半年,半年发布一个版本。Java10它号称有109项新特性,包含12个JEP。
特性列表
- 局部变量的类型推断 var关键字
- GC改进和内存管理 并行全垃圾回收器 G1
- 垃圾回收器接口
- 线程-局部变量管控
- 合并 JDK 多个代码仓库到一个单独的储存库中
- 新增API:ByteArrayOutputStream
- 新增API:List、Map、Set
- 新增API:java.util.Properties
- 新增API: Collectors收集器
- 其它特性
1.局部变量的类型推断 var关键字
这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。
这可能是Java10给开发者带来的最大的一个新特性。下面主要看例子:
//在Java 6时初始化一个Map需要我们这样来声明:
Map<String, String> map_java6 = new HashMap<String,String>();
//事实上泛型方法的参数可以通过上下文推导出来,所以在Java 7 中简化为:
Map<String, String> map_java7 = new HashMap<>();
//到了Java 10 进一步升华了类型推断,我们看一个例子:
var map_java10 = Map.of("hello","world");
System.out.println("map_java10:"+map_java10);
注意:下面几点使用限制
- 局部变量初始化
- for循环内部索引变量
- 传统的for循环声明变量
//局部变量初始化
var list = List.of("hello,world!");
//for循环内部索引变量
for (var s : list) {
System.out.println(s);
}
//传统的for循环声明变量
for (var i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
下面这几种情况,都是不能使用var
- 方法参数
- 全局变量
public static var list = new ArrayList<String>(); //编译报错
public static List<String> ll = new ArrayList<>(); //正常编译通过
2.GC改进和内存管理 并行全垃圾回收器 G1
JDK 10中有2个JEP专门用于改进当前的垃圾收集元素。
Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行。
3.新增API:List、Map、Set
这3个接口都增加了一个新的静态方法,copyOf(Collection)。这些函数按照其迭代顺序返回一个不可修改的列表、映射或包含给定集合的元素的集合。
复制一个集合为不可变集合:
//局部变量初始化
var list = List.of("hello,world!");
// 复制list
List<String> copyList = List.copyOf(list);
System.out.println("copyList:"+copyList);