Java新特性面试
Java8
- 接口:interface 中可以有默认方法,无需被子类实现,通过Interface实现调用
- “函数式接口”是指仅仅只包含一个抽象方法,但是可以有多个非抽象方法(也就是上面提到的默认方法)的接口。
- default实现,可以被子类继承重写,使用this调用
- static实现使用方法和静态方法一样,但是不能被子类继承
- interface和abstract class的区别:interface是为了快速扩展功能,而abstract class是为了被继承实现的。
public class Main implements InterfaceNew{ public static void main(String[] args) { InterfaceNew.sm(); //调用df方法 Main main = new Main(); main.df(); } } /** * InnerMain */ interface InterfaceNew { static void sm() { System.out.println("interface中的sm实现"); } default void df() { System.out.println("interface提供的df实现"); } }
- Lambda
- Stream:不存储数据,只是对数据进行一系列的处理
- 串行流:
- .stream() 为集合创建串行流
- 并行流:可以多线程执行
- parallelStream()获得并行流
- API:
- forEach() 迭代每个数据
- map()传入函数作为变量,对每个数据进行映射(处理)
- limit() 获取指定数量的流
- sorted() 对流进行排序
- Collectors 提供很多归约操作,可以讲将流转化为集合或者聚合元素,要配合collect()来实现
- count()返回流的的数据
- distinct() 返回一个去除重复元素的流
- anyMathch() 检查是否有满足条件的元素,返回值为boolean
- allMatch() 检查是否所有元素都满足匹配的条件
- noneMathc()都不符合匹配条件
- findFirst() 返回流中的第一个元素
- findAny()返回流中的任意元素,这个任意元素只有在多线程中可以看出不同,他会任何线程中选择一个元素返回
- reduce() 将流中元素合并成一个元素
numbers.stream().reduce((n1, n2) -> n1 + n2);
- filter()过滤
- 串行流:
- Optional:用于避免空指针
- Optional .ofNullable()返回一个包含指定值Optional对象,如果值为null,则返回一个空的Optional对象
- isPresent() Optional不为空,返回true
- get()返回值
- ifPresent() 如果不为空,可以以调用指定的方法
- orElse(默认值) 如果为空返回这个默认值
- orElseGet() 如果为空调用指定的函数
- filter() 过滤,如果不满足,返回一个空的Optional
- map() 如果对象是Optional,那么就执行给定的函数
- flatMap()将Optional展开,不再包装成嵌套的Optional
Java9
- JShell 类似于python实时命令行交互工具
- G1成为默认的垃圾回收器
- String使用byte[ ]作为底层,节省空间
Java10
- var关键字局部变量 ,主要作用是,当类型特别长时,可以使用var替代
- Optional增加了orElseThrow来在没有值时抛出指定的异常
Java17
-