JDK7的新特性
数值表示
JDK7之中,byte 类型的变量可以直接赋值二进制,如:
1 | byte var = 0B00000101; |
数字之间可以加上下划线,以便更好地阅读,如:
1 | int var = 4_000_000; |
switch 语句接受 String
在 JDK7之前的 switch语句中,case 无法判断目标值是哪个字符串,而从 JDK7开始,你可以毫不犹豫地这么干:
1 | String str = "hello"; |
泛型对象
实例化一个泛型对象时,不必再在菱形中具体指出是类型:
1 | List<String> list = new ArrayList<>(); |
Try with resource
以前,在 try 语句之中我们一般会打开 IO 资源进行操作,如果有异常便抛出异常进行处理,一般try 语句也会附带一个关闭语句。
如果只是在打开资源时出现异常就很好办,直接在 catch 语句中捕捉异常即可,但是如果在关闭资源时又出现异常怎么办?
答:之前的异常被抛弃,只抛出关闭异常。
这个问题的场景就引出了 try with resource,不仅自动处理资源的关闭,而且在出现 close 异常时,既抛出之前的异常,也抛出 close 异常:
1 | // 括号中的资源会被自动关闭 |
Multi catch
往后,在一个 catch 语句当中,可以捕获多个异常,如:
1 | try (xxxx)) { |
异常重抛
以往,我们在 try 之中抛出子异常,而在 catch 中检测到的是父异常,如果在 catch 中又将异常抛出,那么外部就只能捕获到父异常,而无法知晓具体的子异常是什么,在JDK7里可以手动地限制整个类抛出的子类(哪怕 catch 中捕获到的是父类)
JDK8 的新特性
Lambda 表达式
将函数作为另一个函数的参数
重复注解
同一个注解可以在同一个地方出现多次
接口的默认方法和静态方法
静态方法类似于单例模式,默认方法不像抽象方法那样必须被实现(加上一个default 关键字),实现类既可以实现该方法,也可以不实现该方法。