jdk1.8特性初步了解

新特性

  • 1.default关键字
    引入了新的关键字default,通过default修饰方法,可以让我们在接口里面定义具体的方法实现,如下:
    在这里插入图片描述
    如果接口的实现类实现这个接口以后,不用管这个default修饰的方法,也可以直接调用,如下:
    JAVA学习之接口
    在这里插入图片描述
    所以说这个default方法是所有的实现类都不需要去实现的就可以直接调用。
    注:
    实现类就是实现接口中约定的内容。
    意思是说,接口中定义规范,实现类来确定规范如何运行的。比如接口定义一个Person接口,定义了一个eat方法,这个吃的方法是空的。
    那需要一个实现类比如ZhangSan类实现了Person接口,就必须要给定eat方法的具体实现,说明张三是如何吃的。
    2.Lambda表达式
    Lambda表达式是jdk1.8里面的一个重要的更新
    特点:
    1.使用Lambda必须有接口,并且接口中有且仅有一个抽象方法
    只有当接口中的抽象方法存在且唯一时,才可以使用Lambda,但排除接口默认方法以及声明中覆盖Object的公开方法。
    2.使用Lambda必须具有上下文推断。
    也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

标准格式由三部分组成:
一些参数
一个箭头
一段代码

lambda表达式本质上是一段匿名内部类,也可以是一段可以传递的代码
先来体验一下lambda最直观的优点:简洁代码
在这里插入图片描述

这里可以看到使用Lambda表达式可以大量节省代码。
Lmabda表达式的语法总结
在这里插入图片描述
口诀:左右遇一省括号,左侧推断类型省

注:当一个接口中存在多个抽象方法时,如果使用lambda表达式,并不能智******能匹配对应的抽象方法,因此引入了函数式接口的概念******
3.函数式接口
  定义:“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。
  语法格式:
  修饰符 interface 接口名称 {
public abstract 返回值类型 方法名称(可选参数信息);
// 方法内容
}
  在这里插入图片描述
  4.方法与构造函数引用
  jdk1.8提供了另外一种调用方式::,当 你 需 要使用 方 法 引用时 , 目 标引用 放 在 分隔符::前 ,方法 的 名 称放在 后 面 ,即ClassName :: methodName 。eg:在这里插入图片描述
 测试如下,可以以::形式调用:
 在这里插入图片描述
5.Stream API
Stream操作的三个步骤:
创建stream
中间操作(过滤、map)
终止操作
5.1 特性
不是数据结构,没有内部存储。
不支持索引访问。
延迟计算
支持并行
很容易生成数据或集合
支持过滤,查找,转换,汇总,聚合等操作。
5.2 运行机制
Stream分为源source,中间操作,终止操作。

流的源可以是一个数组,集合,生成器方法,I/O通道等等。

一个流可以有零个或多个中间操作,每一个中间操作都会返回一个新的流,供下一个操作使用,一个流只会有一个终止操作。
6.流
定义:流是Java API的新成员,它允许我们以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,我们可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,也就是说我们不用写多线程代码了。
流的构建方法:
在这里插入图片描述

总结:
jdk1.8相较于1.7以前有5方面的优化。
1、速度更快
2、代码更少(增加了新的语法Lambda表达式)
3、强大Stream API
4、便于并行
5、最大化减少空指针异常 OPtional

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值