从零开始学java - 第二十七天

114 阅读2分钟

这是我参与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的面试题看看里面都会去考虑什么知识点,晚安~