JDK8 新特性总结

JDK8 新特性总结

Java8 新增了非常多的特性,我们主要讨论以下几个:

- Lambda 表达式
- 函数式接口
- 方法引用 / 构造器引用
- Stream API
- 接口中的默认方法 / 静态方法
- Optional 类
- 新时间日期 API
- Base64
- 其他新特性(Nashorn JavaScript)



一、Lambda 表达式

Lambda语法

一行执行语句的写法:

(parameters) -> expression //当只有一个参数时,可省略括号

如果有多行执行语句,可以加上{}

(parameters) -> { statements; }

另外Lambda表达式可以省略参数类型及return:

// 指定参数类型及return
(int x, int y) -> { return x + y; }
// 指定参数类型,不指定return
(int x, int y) -> x + y;
// 不指定参数类型和return,编译器会自动推断
(x, y) -> x + y;

tips:
当lambda实现的抽象方法需要return结果时,expression可理解成要被return的单条结果返回语句。
statements则是等价于方法体中的表达式,需要满足相应语法要求。

(a,b) -> ab // 满足expression
(a,b) -> a=b=a
b // 满足expression
(a,b) -> return ab //这种就是错误的,等价于 return return ab
(a,b) -> { return ab; } // 满足statements,普通写法
(a,b)-> { a
b; } // 这句话是错的,因为 ee 不是 statement, 而是 expression
// 下面是多表达式的情况,返回的值是显示指明 return 的地方
(int e) -> {
e = 1
1;
return e*3;
}

哪里使用lambda

  • 你可以在函数式接口上使用Lambda表达式(函数式接口就是只定义一个抽象方法的接口。例如Comparator和Runnable)
  • Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。

@FunctionalInterface

为了确保接口可以使用lambda表达式,java新增加了一个注解,@FunctionalInterface,用这个注解修饰一个接口,这个接口只能有一个抽象的方法。这类接口称为函数式接口。

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

但因为java中的接口增强了(在接口中可以使用默认方法和静态方法),这两个方法都不是抽象的,所以说用@FunctionalInterface修饰的接口还是可以包含这两类方法的。但如果定义多个抽象方法,编译器就会报错。

@FunctionalInterface
interface IInner {
    void printInt(int x);
    default void moren(){
        System.out.println("defalut");
    }

    static void jingtai() {
        System.out.println("static");
    }
    void printString(); 
}

在这里插入图片描述


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值