Java8新特性



    Java8对java的语法又进行了比较大的扩充,主要是增加了函数式接口以及Lambda表达式,以支持流行的函数式编程。本文对此进行一些介绍。

一.Java8接口的变化

1.增加了default方法和static方法,这两种方法必须有方法体。default方法属于实例,static方法属于类(接口)。static方法是不能被继承的,但是static变量是可以被继承的。注意接口中的default方法和static方法都是public型的。接口里可以写static方法了,就意味着可以写main方法了,但是通常不这么干。
2.父接口的抽象方法,在子接口中可以使用default方法实现。同样父接口的default方法,在子接口中可以重写为抽象方法。
3.如果一个类实现了两个(以上)接口,并且这两个接口相互之间没有继承关系。如果这两个接口存在相同的default方法,编译会报错。如果这两个接口有继承关系,default方法会被子接口覆盖。如果必须继承两个(以上)没有继承关系的接口,并且存在相同的default方法,实现类可以通过特殊语法指定要访问哪个接口的方法。在实现类或子接口中重写该default方法,在方法里面使用以下语法:<接口名>.super.<方法名>([参数]..);
3.如果一个接口只有一个抽象方法(包括继承的),该接口是一个函数式接口。函数式接口可以使用Lambda表达式实现。如果使用@FunctionalInterface注解接口,则限定该接口必须是函数式接口,有且仅有一个抽象方法,但是可以有多个default方法和static方法。

特别注意:Java8之前,在内部类里面只能访问final的局部变量。从Java8开始,如果在内部类里面访问局部变量,会自动给局部变量加上final修饰,该局部变量将不能再修改。

二.Lambda表达式

    Lambda 表达式允许我们定义一个匿名的方法,并将它作为 Functional interface 的一个实例。Lambda表达式可以认为是一种特殊的匿名内部类,但它并不会真的编译出一个class文件。

   Lambda表达式只能应用于函数式接口,基本操作符如下:
   () : 表示参数列表,不需要指定参数的类型,会自动推断
   -> : 连接符
   {} : 表示方法体

   基本语法:
   ([形参列表]) -> {
        //执行语句,方法体
        [return ...;]
   }
  
   1.形参列表,不带参数类型,Lambda表达式自动推断数据类型。
   2.如果形参列表是空的,只保留()即可。
   3.如果只有一个形参,()可以省略,只需要参数的名称即可。
   4.如果执行语句只有一行,可以省略{},但是有返回值时,有点特殊。
   5.如果有返回值,且执行语句只有一行,可以省略{},但必须将return关键字也省略,这也是允许的,但不建议这样做。

三.方法引用

方法引用跟 Lambda 表达式很像,他们都需要一个目标类型,但是不同的是方法引用不提供方法的实现,他们引用一个已经存在的类或者对象的方法。 

   引用方法:
          引用类方法
                <类名>::<类方法名>
                把调用函数式接口方法的所有参数都传递给引用的类方法。
          引用实例方法
                <实例名>::<实例方法名>
                把调用函数式接口方法的所有参数都传递给引用的实例方法。
          通过类引用实例方法
                <类名>::<实例方法名>
                把函数式接口方法的第一个参数,作为类的一个实例。
                函数式接口方法的参数中,第一个参数必须是::前面的类名的一个实例。
          引用构造器方法
               <类名>::new
                把调用函数式接口方法的所有参数都传递给引用的构造器方法。

 

   技术更新的好快呀!这正说明了这个行业的活力,我很幸运能从事这个行业,但也确实感到了很大压力,学习技术是一件吃苦的事,真不容易呀。但必须坚持,不能放弃,君子一诺!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值