java8新特性简记

根据自己的理解记忆方式,提取几个主要的特性。

一、函数式接口相关#

@FunctionalInterface:函数式接口,功能接口。

特点:

  • 有且仅有一个抽象方法
  • 允许静态方法
  • 允许默认方法
  • 允许java.lang.Object中public类型的方法,这些方法对于函数式接口来说,不被当成是抽象方法,因为所有的函数式接口的实现都是默认继承了Object类,Object类含有该方法的实现。
  • 该注解非必须,只要符合函数式接口的条件,可以不加注解,加上注解知识辅助编译器进行检查

它最大的作用是为了支持行为参数传递,如传递以下作为参数:

  1. Lambda

  2. 方法引用

  3. 函数式接口对应的实例对象

    ...

添加了该注解之后,从而衍生(or伴生)出以下特性:

1、Lambda表达式#

​ 允许把一个方法作为参数传递进方法里。如:

Arrays.asList(1,2,3,4).foreach(i -> System.out.println(i));

2、接口的默认方法实现和静态方法#

​ 通过default、static给接口中的方法添加默认实现和静态实现。

​ 默认实现的作用:在接口升级中,如果要给接口添加一个方法,会导致所有实现了接口的类都需要进行方法的实现,添加了默认实现之后,可以降低接口升级的代价,不需要所有的实现类都进行一次实现。

3、方法引用#

​ 方法引用指的是可以直接引用java类或对象的方法,使得代码更加简介易懂。

​ (放到这个大分类下面是因为比较像lambda表达式,lambda是将构造一个函数,方法引用是使用现有函数,都是为了代码的简洁)

  1. 引用构造方法:ClassName::new
  2. 引用类静态方法:ClassName::methodName
  3. 引用类的任意对象方法:ClassName::methodName
  4. 引用某个对象的方法: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注解#

​ 允许注解的重复使用

posted @   醉千灯  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩