JDK8到JDK17新特性小结

JDK8

Lambda

/**
* 匿名开启一个线程
*/
public static void jdk8Lambda() {
    new Thread(() -> System.out.println("Lambda")).start();
}

Stream(流)

public static void jdk8Stream(){
 List<String> list = new ArrayList<String>();
 list.add("aaa");
 list.add("bbbb");
 list.add("cccc");
 list.stream().distinct().forEach(System.out::println);
}

Optional

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象

public static void jdk8Optional() {
    // 创建一个包装对象值为空的Optional对象
    Optional<String> optStrObj = Optional.empty();
    // 创建包装对象值非空的Optional对象
    Optional<String> optStrObj1 = Optional.of("aa");
    // 创建包装对象值允许为空的Optional对象
    Optional<String> optStrObj2 = Optional.ofNullable(null);
}

方法引用

public static void jdk8Method() {
    List<String> strs= new ArrayList();
    strs.add("aa");
    strs.add("bb");
    // 实例中我们将 System.out::println 方法作为静态方法来引用。
    strs.forEach(System.out::println);
}

日期Time api

public static void jdk8DateTime() {
    // 获取当前年月日
    LocalDate localDate = LocalDate.now();
    System.out.println(localDate);
    // 获取当前时间
    LocalTime localTime = LocalTime.now();
    System.out.println(localTime);
    // 获取具体时间
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime);
    // 字符串转换
    String str = "2022-01-01";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDate localDate2 = LocalDate.parse(str, formatter);
    System.out.println(localDate2);
}

JDK9

接口可以有私有方法:

interface Jdk9Interface{

    default String defaultTest() {
        privateTest();
        return "default";
    }

    private String privateTest() {
        System.out.println("私有方法");
        return "private";
    }
}

增强钻石操作符 <>

 public static void jdk9Diamonds(){
    // java7和8 <>没有了数据类型
    Map<String,String> map8 = new HashMap<>(1);
    // java9 添加了匿名内部类的功能 后面添加了大括号{}  可以做一些细节的操作
    Map<String,String> map9 = new HashMap<>(1){
    @Override
    public int size() {
    return 0;
    }
    };
}

异常处理try升级

jdk9可以传一个变量就可以关闭流。

public static void jdk9Try(){
    // jdk8:
    try(InputStreamReader reader =new InputStreamReader(System.in)){
    reader.read();
    }catch (IOException e){
    e.printStackTrace();
    }
    // jdk9以后:
    InputStreamReader reader =new InputStreamReader(System.in);
    try(reader){
    reader.read();
    }catch (IOException e){
    e.printStackTrace();
    }
}

引进HttpClient

无需maven引入

JDK10

局部变量VAR

将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为null,因为不能判断具体类型,会报异常。

public static void jdk10Var() {
    var number = 10;
    var str    = "aabbcc";
    var list   = new ArrayList<>(1);
    var map    = new HashMap<>(1);
    var set    = new HashSet<>(1);
}

copyOf方法

在java.util.List/ Set/
Map新增加了一个静态方法copyOf,这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。但是如果将返回后的集合继续修改,那么报异常。

垃圾收集器的优化

  1. JDK9:新生代:ParNew收集器。
  2. 老年代:Parallel Old收集器 JDK10:G1(Garbage-First)全收集器
  3. JDK10中含有垃圾收集器的可视化工具。在JDK安装目录的bin中 jmc.exe

JDK11

Lambda中使用 var

你可能感兴趣的:(java基础,git,github,mysql)