1.更加简洁地在try catch中使用资源:
可以直接在try中使用之前定义的资源,而不需要像jdk8中必须要在try中定义资源。资源同样会被自动关闭。
package cn.edu.tju.demo.controller;
import java.io.FileReader;
public class NineTest {
public static void main(String[] args) throws Exception {
FileReader fileReader=new FileReader("d:\\1111\\1111.txt");
char[] ch=new char[1024];
try(fileReader){
int byteCount=fileReader.read(ch);
System.out.println(byteCount);
}
}
}
2.@SafeVarargs注解的改变,允许把该注解用于private的实例方法
@SafeVarargs
private void test(int age, String... args){
System.out.println("this is my test case.");
}
这种用法在jdk8及以前的版本报错,只能加上static或final关键字
3.下划线不能用作标识符.
int _=8888;
报错。
在jdk 8及以前版本能够正常工作。
4.在接口内能够定义private 方法。
package cn.edu.tju.demo.controller;
public interface MyInterface {
default void saySomething(){
print();
}
private void print(){
System.out.println("ok");
}
}
上面的print方法的定义,在jdk 8编译无法通过。
5.菱形语法的增强
接口定义:
package cn.edu.tju.demo.controller;
public interface MyGenericClass<T> {
void test(T t);
}
在主类中定义匿名内部类对象,
package cn.edu.tju.demo.controller;
public class DiamondSyntaxTest {
public static void main(String[] args) {
MyGenericClass<String> f = new MyGenericClass<>() {
public void test(String str) {
System.out.println(str);
}
};
}
}
其中new MyGenericClass<>()是jdk9开始支持的写法,jdk8 及以前版本需要new MyGenericClass()这种写法。