这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
今天继续Java9~
改进的try-with-resources
- try-with-resources是jdk7中的一个异常处理机制,能够很容易的关闭try-catch语句块中使用的资源
- try-with-resources确定了每个资源在语句结束时关闭
- 在jdk9已更新,如果已经拥有final或相当于final的资源,可以直接在try-with-resources中使用该变量
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
public class Test{
public static void main(String[] args)throws IOException{
System.out.println(Play("CSGO"))
}
static String Play(String name)throws IOException{
Reader inputName = new StringReader(name);
BufferedReader br = new BufferedReader(inputName);
try(BufferedReader br1 = br){
return br1.readLine()
}
}
}
- 如上,try语句之前必须要去再实例化一个对象才可以去使用它
- 但是Java9使这个过程变得更加简便(只有try语句部分有所改动,所以直接写try语句了)
try(br){
return br.readLine()
}
- 无需重新生成对象
改进的@Deprecated注解
- @Deprecated注解可以标记API的状态:
- 使用它存在风险,可能导致错误
- 可能在未来的版本中不兼容
- 可能在未来版本中删除
- 一个更好和更高效的方案已经取代它
- Java9中新增了两个注解元素
- since - 元素指定已注解的API元素已被弃用的版本
- forRemoval - 元素表示注解的API元素在将来的版本中被删除,应该迁移的API
钻石操作符(Diamond Operator)
- 它是Java7引入的概念,可以让代码更易读
- 在Java9中做了更新,可以与匿名的内部类一起使用,从而提高代码的可读性
// 旧版本
Handler<Integer> intHandler = new Handler<Integer>(1){
@Override
public void handle(){
System.out.println(content)
}
}
// 新版本
Handler<Integer> intHandler = new Handler<>(1){
@Override
public void handle(){
System.out.println(content)
}
}
改进的Optional类
- 在Java8被引入,能够很好的解决空指针的异常
- 在Java9中,新增了三个方法来改进它的功能:
stream()
ifPresentOrElse()
or()
stream()方法
public Stream<T> stream()
stream()
的作用就是将Optional转为一个Stream,如果该Optional中包含值,那么就返回包含这个值的Stream,否则返回一个空的Stream
ifPresentOrElse()方法
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
- 它的改进就是新增的else,接收两个参数(Consumer,Runnable)
- 如果一个Optional包含值,则对其调用
action.accept(value)
,如果Optional不包含值,那么ifPresentOrElse便会调用emptyAction.run()
or()方法
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
- 如果值存在,返回Optional指定的值,否则返回一个预设的值 今天就学到这里吧,目前就基本已经是过了一遍了,接下来去看看Java的面试题看看里面都会去考虑什么知识点,晚安~