java9的更新主要是新增的jigsaw的模块化系统,语法上并没有很大的变化,这里简单记录语法上的变化并附上案例。

try-with-resources

jdk7中引入try-with-resources由语言自身管理closable资源的关闭

Resource resource1=new Resource();
try(Resource r1 = resource1){
}

jdk9中使用时可以进一步省去在try语句中定义Resource r1

Resource resource1=new Resource();
try(resource1){
}

这里resource1必须是final或效果等价于final的变量。

@SafeVarargs

SafeVarargs是用于标注在包含泛型入参的方法上,标识该方法不会出现类型安全问题,在JDK9之前,这个注解只能加在静态方法和final方法上(他们都不可被override),现在可以加在私有实例方法上了。

匿名类可以使用泛型

JDK9之前匿名类无法使用钻石描述符(即<>),在jdk9中对于可以明确类型的匿名类可以使用钻石描述符了:

    List<String> a=new ArrayList<>(){};	//可以编译
    a=new ArrayList<>(){}; 				//无法确定泛型类型无法编译

禁用变量名“_”

变量名不能是“_”。

int _=1; //jdk9中报错

接口的私有方法

jdk8中在接口中可以加入static 方法

interface Interface {
    static void method() {
    }
}

但该方法是public的没有办法在子类之间共享代码而不外露,jdk9中可以使用私有方法实现子类间的代码共享

interface Interface {
    static void staticMethod() {
    }

    private void privateMethod(){
    }
}
class Instance implements Interface{
    void test(){
        Interface.super.privateMethod();
    }
}