java8新特性简记
根据自己的理解记忆方式,提取几个主要的特性。
一、函数式接口相关#
@FunctionalInterface:函数式接口,功能接口。
特点:
- 有且仅有一个抽象方法
- 允许静态方法
- 允许默认方法
- 允许java.lang.Object中public类型的方法,这些方法对于函数式接口来说,不被当成是抽象方法,因为所有的函数式接口的实现都是默认继承了Object类,Object类含有该方法的实现。
- 该注解非必须,只要符合函数式接口的条件,可以不加注解,加上注解知识辅助编译器进行检查
它最大的作用是为了支持行为参数传递,如传递以下作为参数:
-
Lambda
-
方法引用
-
函数式接口对应的实例对象
...
添加了该注解之后,从而衍生(or伴生)出以下特性:
1、Lambda表达式#
允许把一个方法作为参数传递进方法里。如:
Arrays.asList(1,2,3,4).foreach(i -> System.out.println(i));
2、接口的默认方法实现和静态方法#
通过default、static给接口中的方法添加默认实现和静态实现。
默认实现的作用:在接口升级中,如果要给接口添加一个方法,会导致所有实现了接口的类都需要进行方法的实现,添加了默认实现之后,可以降低接口升级的代价,不需要所有的实现类都进行一次实现。
3、方法引用#
方法引用指的是可以直接引用java类或对象的方法,使得代码更加简介易懂。
(放到这个大分类下面是因为比较像lambda表达式,lambda是将构造一个函数,方法引用是使用现有函数,都是为了代码的简洁)
- 引用构造方法:ClassName::new
- 引用类静态方法:ClassName::methodName
- 引用类的任意对象方法:ClassName::methodName
- 引用某个对象的方法:instanceName::methodName
二、新的API和工具类#
1、新增Optional类#
主要是用来处理空指针的异常
2、新增Stream类#
把函数式编程的风格引入到java语言。
如:在集合中进行值的匹配
// List<Person> personList
// 判断是否有叫张三的人
boolean hasZS = personList.stream.anyMatch(person -> "张三".equals(person.getName()));
// 判断是否全部小于18
boolean less18 = personList.stream.allMatch(person -> person.getAge() < 18);
3、新增日期API#
新增java.time.*; 主要包含了处理日期、时间、时区等操作。
如:
// 通过时区获取当前的日期和时间
Clock c = Clock.system(ZooneId.of("Asia/BeiJing"));
System.out.println(c.millis());
System.out.println(c.instant());
// 获取秒、毫秒
Instant ist = Instant.now();
System.out.println(ist.getEpochSecond());
System.out.println(ist.getEpochMilli());
4、Base64#
java8把Base64添加到类库java.util.Base64;中
三、其他#
1、js#
支持通过java程序来调用js代码
2、并行数组#
新增方法用于支持并行数组处理,类似于parrallelSort()。
3、@Repeatable注解#
允许注解的重复使用
求知务实
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)