zoukankan      html  css  js  c++  java
  • Java8新特性

    interface ii1{

    public default void de() {System.out.println("默认");}//这里的default关键字不是访问修饰符(隐式public),是接口的特有的关键字,用以表示已被实现的方法,继承类不可写此关键字。
    static void st() {System.out.println("静态");}
    void qq();void ww();
    public static void main(String[] args) {
    st();
    }
    }

    public class Test1 {

    public static void main(String[] args) {

    new ii1(){//通过这种方式创建对象的话,接口里可以有多个抽象方法,但是通过lambda表达式或方法引用的方式就只能有一个抽象方法。
    int ee=3;
    public void ww() {}
    public void qq() {de();ii1.st();}
    };}}

    lambda表达式。

    表达式或者方法引用代表的是函数式接口类型的对象。

    如果方法体只有一行语句,且该方法有返回值,如果方法体里的那一行语句本身就是一个值的形式,可以省略return。

    Collections.sort(names, (String a, String b) -> b.compareTo(a));

    lambda表达式可以有多条语句的,而方法引用则要求方法的实现只有一条语句,且方法引用不包含参数,只包含实现语句,如果该实现语句是一个静态方法调用,则为Integer::value;这种静态类名+方法名的形式,参数只能作为此方法的参数,这也是为什么只允许一条语句并且可以不写参数。引用类型对象也可以方法引用,但是稍微复杂。

    lambda表达式也可以引用外部变量,但是不可以修改外部的局部变量的值,却可以修改静态和实例变量的值。也不能调用default修饰的方法。

    函数式接口。

    要求只有一个抽象方法,但可以有多个default方法。如

    @FunctionInterface

    public interface FI<T,E>{

    T haha(E e);}

  • 相关阅读:
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    "=="和equals方法究竟有什么区别?
    Tomcat发生java.lang.OutOfMemoryError: PermGen space的解决方案
    HashMap原理
    springMVC
    SqlServer和Oracle修改表结构语句
    quartz定时任务时间表达式说明
    Linq to Entity 时间差作为筛选条件产生的问题
    密码学基础
    C#如何使用异步编程【BeginInvoke/EndInvoke】
  • 原文地址:https://www.cnblogs.com/riverer/p/deded.html
Copyright © 2011-2022 走看看