JDK 8~11新特性

新特性会一起使用介绍 ,主要介绍主要特性及必须掌握次要功能。


使用openJDK :链接


jdk 路线图 :链接  


jdk 发行说明:链接

  非TLS版本(长期支持版本例如:jdk11)都是测试和新功能版本,每3年将发布一个TLS版本,意味着下一个TLS版本是jdk17


Lamdba 表达式 

函数接口 

  •  java.util.function 模块提供了常用函数接口,例如:消费者接口,生产者接口等,以消费者者接口为例
@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}
  • 自定义函数接口只能有一个方法,默认方法可以有多个,必须通过@FunctionalInterface注解声明
public class Test {

    public static void main(String[] args) {
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String o) {
                o += "test";
                System.out.println(o);
            }
        };
        consumer.accept("123");
    }

}
  •     转换成 Lamdba 表达式
public class Test {

    public static void main(String[] args) {
        Consumer<String> consumer = o -> {
            o += "test";
            System.out.println(o);
        };
        consumer.accept("123");
    }

}
  •    函数接口非常灵活可以应用任何地方,以上只是展示最简单的使用

DSL(Domain Specified Language)领域特定语言

由Lamdba 扩展了 DSL,spring security 大量使用DSL。

DSL 特性

  1. 提高开发效率,通过DSL来抽象构建模型,抽取公共的代码,减少重复的劳动;
  2. 和领域专家沟通,领域专家可以通过DSL来构建系统的功能;
  3. 执行环境的改变,可以弥补宿主语言的局限性。

Stream ( 管道流)

java.util.stream模块  将对象数组集合转成流进行任意操作

public class Test {

    public static void main(String[] args) {
        //去重遍历输出
        Stream.of(1, 2, 1).distinct().forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });
    }

}
public class Test {

    public static void main(String[] args) {
        //去重遍历输出,转成Lambda表达式
        Stream.of(1, 2, 1).distinct().forEach(integer -> System.out.println(integer));
    }

}
public class Test {

    public static void main(String[] args) {
        /*
         * :: 方法引入语法 (双冒号语法)
         * 去重遍历输出,转成方法引入语法(::调用的方法只有一个参数)
         */
        Stream.of(1, 2, 1).distinct().forEach(System.out::println);
        //Lambda写法将流转成数组
        Integer[] arrays = Stream.of(1, 2, 1).distinct().toArray(value -> new Integer[value]);
        //转换为方法引入语法 var jdk10 引入局部变量类型推断
        var array = Stream.of(1, 2, 1).distinct().toArray(Integer[]::new);
    }

}

 


jdk9 新增私有接口

public interface Test {
    private void test() {
        
    }

}

 


 总结

JDK8  核心

  • Lambda
  • Stream

JDK8  其它必须掌握

  • java.time 模块 例:LocalDate, LocalDateTime,Duration,TimeZone
  • java.nio.file 模块 例:Files,Channels

JDK9  核心

  • 接口私有方法

JDK9  其它必须掌握

  • java.util模块 新增Optional 可以解决空指针烦恼

JDK10  核心

  • 局部变量类型推断 var

JDK10  其它必须掌握

 


JDK11  核心

  • 局部变量类型推断 var 在lambda中的使用

JDK11  删除Java EE和CORBA模块


 注:部份主要功能未介绍,因为在后续jdk版本中移除。 

下一个TLS版本jdk17预计2021年3月份发布, 将再次介绍 jdk12~17的 主要功能。

 jdk12~17预览

  • ZGC 垃圾回收器
  • switch表达式 
  • 文本块
  • instanceof的模式匹配
  • sealed 关键字

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值