更新
2017.10的某天,Oracle发布了Java 9 ,Java 9的语言只更新了一小部分(jshell 除外),下面是一些简单的解读.Oracle的原文地址在这:访问原文
更新的部分
代码务必在Java 9环境中尝试,不然会编译报错.
一共更新了大概5个部分的语法更新,记录如下.
try自动关闭资源优化
实现了AutoCloseable或者Closeable接口的类,可以用try实现自动关闭资源,在JDK中的FileReader,FileInputStream,FileOutputStream等这些类都是可以自动关闭的.
来个官方的例子:
// A final resource final Resource resource1 = new Resource("resource1"); // An effectively final resource Resource resource2 = new Resource("resource2"); // 在Java 7 或者8里面你要像下面这样写: try (Resource r1 = resource1; Resource r2 = resource2) { // ... } // 在Java 9 里面你就可以直接这样写了 try (resource1; resource2) { // ... }
然后按照这个,我自己简单写了一个版本:
BufferedReader fis = new BufferedReader(new FileReader("E:\\a.txt")); BufferedReader fis2 = new BufferedReader(new FileReader("E:\\a.txt")); // 在低于Java 9 的环境中,下面这一行会编译报错. try(fis;fis2){ System.out.println(fis.readLine()); System.out.println(fis2.readLine()); }
简化了一些代码.
@SafeVarargs注解
@SafeVarargs注释只能应用于不能被覆盖的方法。 这些包括静态方法,最终实例方法,以及Java SE 9中的新增私有实例方法。
您可以将钻石语法与匿名内部类一起使用
可以在Java程序中编写的类型(如int或String)称为可指定类型。 无法用Java程序编写的编译器内部类型称为不可指定类型。
由于钻石操作员使用的推断,可能会出现不可指定的类型。 因为使用菱形和匿名类构造函数的推断类型可能不在类文件中签名属性所支持的类型集之外,所以在Java SE 7中不允许使用具有匿名类的菱形。
在Java SE 9中,只要推断的类型是可指定的,就可以在创建匿名内部类时使用菱形运算符。
不能单独使用下划线
在Java 9中,不能单独使用下划线,因为以后可能给下划线(_)特殊含义,所以在Java 9中定义如下变量会无法编译(在Java 8中使用无影响).
List<Integer> _ = new ArrayList<>(); String _="123"; // 但是下面这样是可以的.亲测. String _abc = "123";
私有接口方法可用
在Java 9中,官方说明是可以使用私有接口方法,但我发现,公有方法也可以用(但必须是public static修饰才可以).
参考如下:
interface User{ private void test(){ System.out.println("abc"); } private String show(){ System.out.println("abc"); return "name"; } public static String show2(){ System.out.println("abc"); return "name"; } static String show3(){ System.out.println("abc"); return "name"; } }
大概就这些.