JDK1.8有哪些新特性?JDK1.8详细介绍—叩丁狼

  JDK1.8有哪些新特性?JDK1.8详细介绍

 

  JDK1.8目前在企业中已经广泛被应用,今天我们将学习以下方面的新特性:

  Lambda表达式

  函数式接口

  方法引用

  接口的默认方法和静态方法

  Optional

  Streams

  并行数组

  Lambda表达式

  Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。可以使代码变的更加简洁紧凑。

  ⒈基本语法

  (参数列表) - {代码块}

  需要注意:

  参数类型可省略,编译器可以自己推断

  如果只有一个参数,圆括号可以省略

  代码块如果只是一行代码,大括号也可以省略

  如果代码块是一行,且是有结果的表达式, return 可以省略

  注意:事实上,把Lambda表达式可以看做是匿名内部类的一种简写方式。当然,前提是这个匿名内部类对应的必须

  是接口,而且接口中必须只有一个函数!Lambda表达式就是直接编写函数的:参数列表、代码体、返回值等信息,

  用函数来代替完整的匿名内部类 !

  ⒈Function类型接口

  Function代表的是有参数,有返回值的函数。还有很多类似的Function接口:

  看出规律了吗?这些都是一类函数接口,在Function基础上衍生出的,要么明确了参数不确定返回结果,要么明确结果不知道参数类型,要么两者都知道。

  ⒉Consumer系列

  Consumer系列与Function系列一样,有各种衍生接口,这里不一一列出了。不过都具备类似的特征:那就是不返回任何结果。

  ⒊ Predicate系列

  Supplier系列,英文翻译就是 供应者 ,顾名思义:只产出,不收取。所以不接受任何参数,返回T类型结果。

  方法引用

  方法引用使得开发者可以将已经存在的方法作为变量来传递使用。方法引用可以和Lambda表达式配合使用。

  Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。叩丁狼

  ⒈默认方法

  默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。

  默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写,例子代码如下:

  Defaulable接口使用关键字default定义了一个默认方法notRequired()。DefaultableImpl类实现了这个接口,同时默认继承了这个接口中的默认方法;OverridableImpl类也实现了这个接口,但覆写了该接口的默认方法,并提供了一个不同的实现。

  ⒉ 静态方法

  Java 8带来的另一个有趣的特性是在接口中可以定义静态方法,我们可以直接用接口调用这些静态方法。例子代码如下:

  下面的代码片段整合了默认方法和静态方法的使用场景:

  这段代码的输出结果如下:

  由于JVM上的默认方法的实现在字节码层面提供了支持,因此效率非常高。默认方法允许在不打破现有继承体系的基础上改进接口。该特性在官方库中的应用是:给 java.util.Collection 接口添加新方法,如 stream() 、

 

  parallelStream() 、 forEach() 和 removeIf() 等等。

  尽管默认方法有这么多好处,但在实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。如果你想了解更多细节,可以参考官方文档。

  Optional

  Java应用中最常见的bug就是空值异常。

  Optional 仅仅是一个容器,可以存放T类型的值或者 null 。它提供了一些有用的接口来避免显式的 null 检查,可以参考Java 8官方文档了解更多细节。

  接下来看一点使用Optional的例子:可能为空的值或者某个类型的值:

  如果 Optional 实例持有一个非空值,则 isPresent() 方法返回 true ,否则返回 false ;如果 Optional 实例持有null , orElseGet() 方法可以接受一个lambda表达式生成的默认值;map() 方法可以将现有的 Optional 实例的值转换成新的值;orElse() 方法与 orElseGet() 方法类似,但是在持有null的时候返回传入的默认值,而不是通过Lambda来生成。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值