局部变量的类型推断

这个功能减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺

使用举例

public static void main(String[] args) {
// 使用var作为变量类型,通过右侧的泛型推断类型,在编译阶段自动将var转换为推断的类型
var list = new ArrayList<String>();
list.add("hello,world!");
System.out.println(list);
}

使用场景

public static void main(String[] args) {
//局部变量初始化
var list = new ArrayList<String>();
//for循环内部索引变量
for (var s : list) {
System.out.println(s);
}
//传统的for循环声明变量
for (var i = 0; i < list.size(); i++) {
System.out.println(i);
}

禁用场景

public void test2() {
//1.局部变量不赋值,就不能实现类型推断
// var num ; //2.lambda表示式中,左边的函数式接口不能声明为var
// Supplier<Double> sup = () -> Math.random(); // var sup = () -> Math.random(); //3.方法引用中,左边的函数式接口不能声明为var
// Consumer<String> con = System.out::println; // var con = System.out::println; //4.数组的静态初始化中,注意如下的情况也不可以
int[] arr = {1, 2, 3, 4};
// var arr = {1,2,3,4}; // 5:没有初始化的局部变量声明
// var s = null; // 6:catch块
// try{
//
// }catch(var e){
// e.printStackTrace();
// }
}

其他

JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程

JEP304,统一的垃圾回收接口

JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟

JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间

JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优 化可以只停止单个线程,而不是停全部线程或一个都不停

JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替

JEP314,使用附加的 Unicode 语言标记扩展

JEP317,能将堆内存占用分配给用户指定的备用内存设备

JEP317,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能

JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证 书,这样 OpenJDK 对开发人员使用起来更方便

JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为 $FEATURE.$INTERIM.$UPDATE.$PATCH,分别是大版本,中间版本,升级包和补丁版本

05-25 20:06