JDK8(Java Development Kit 8)是 Java 开发工具包的一个重要版本。它带来了许多显著的变化和改进,和新特性外,还对性能进行了优化,进一步增强了 Java 语言的功能和表现力,为开发者提供了更多便捷高效的编程方式,对 Java 的发展产生了深远的影响。下面简单介绍下常用的几个jdk8的新特性。
1.Lambda表达式
创建一个新的线程,指定线程要执行的任务
1.代码分析:
1.Thread类需要一个Runnable接口作为参数,其中的抽象方法run方法是用来指定线程任务内容的核心
2.为了指定run方法体,不得不需要Runnable的实现类
3.为了省去定义一个Runnable 的实现类,不得不使用匿名内部类
4.必须覆盖重写抽象的run方法,所有的方法名称,方法参数,方法返回值不得不都重写一遍,而且不能出错,其中最关键就是run方法中的具体实现业务。
2.Lambda表达式的优点:
1.简化了匿名内部类的使用,语法更加简单的语法糖。
2.匿名内部类语法冗余,体验了Lambda表达式后,发现Lambda表达式是简化匿名内部类的一种方式。
3.Lambda省去了面向对象的条条框框,Lambda的标准格式由3个部分组成
(参数类型 参数名称) -> { 代码体; }
2.Optional类
Optional类是 JDK8 引入的一个用于处理可能为空对象的容器类
它的主要优点包括:
- 明确表达空值处理意图:使代码更清晰地表明对可能为空情况的处理方式。
- 提供简洁的操作方法:如orElse()、orElseGet()、ifPresent()等,方便进行不同情况下的处理。
- 通过使用Optional,可以减少空指针异常的潜在风险,提高代码的健壮性和可读性
3.Stream API
当我们在需要对集合中的元素进行操作的时候,除了必需的添加,删除,获取外,最典型的操作就是集合遍历,
1.数据过滤和筛选:
假设你有一个员工列表,要找出特定条件的员工
2.数据转换:
比如将对象的某个属性提取或进行计算后形成新的列表。
3.数据聚合:
计算一些统计信息。
4.多条件排序:
5.数据分组:
注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象! Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。
Stream API能让我们快速完成许多复杂的操作,如筛选、切片、映射、查找、去除重复,统计,匹配和归约。
4.函数式接口
在 Java 中,函数式接口是指只包含一个抽象方法的接口。
一些常见的函数式接口示例包括:
- java.util.function.Consumer<T>:接受一个参数,不返回值。
- java.util.function.Function<T, R>:接受一个类型为 T 的参数,返回一个类型为 R 的值。
- java.util.function.Predicate<T>:接受一个参数,返回一个布尔值。
创建函数式接口:
1.Predicate 接口
Predicate<T>是一个函数式接口。它主要有一个方法test(T t),用于对给定的参数进行某种条件判断并返回一个布尔值。 它在集合的过滤等操作中经常被使用
2.Function接口
Function<T, R> 是一个函数式接口,其中 T 是输入类型,R 是输出类型。它主要有一个方法 apply(T t) ,用于将输入的 T 类型数据转换为 R 类型数据
3.Consumer接口
Consumer是 Java 中的一个函数式接口。它定义了一个方法accept,用于接收一个参数并执行相应的操作,但不返回任何值。它常用于执行一些对数据的消费行为,比如对集合中的元素进行某种处理或执行一些副作用操作
使用函数式接口可以方便地与 Lambda 表达式结合使用,使得代码更加简洁和灵活。例如,可以将一个 Lambda 表达式作为参数传递给一个方法,该方法期望一个符合特定函数式接口定义的对象。这样可以更简洁地表达一些特定的行为或操作。
总结: 还有很多新的特性 和使用方式,具体的需要大家自行去了解学习。一起进步!
本文暂时没有评论,来添加一个吧(●'◡'●)