一、随堂复习
1. JDK新特性的概述
-
几个重要的版本
-
jdk 5.0 / jdk 8.0 :里程碑式的版本
-
jdk9.0 开始每6个月发布一个新的版本
-
LTS : jdk8 、 jdk 11 、 jdk 17
-
-
如何学习新特性
> 角度1:新的语法规则 (多关注) 自动装箱、自动拆箱、注解、enum、Lambda表达式、方法引用、switch表达式、try-catch变化、record等 > 角度2:增加、过时、删除API StringBuilder、ArrayList、新的日期时间的API、Optional等 > 角度3:底层的优化、JVM参数的调整、GC的变化、内存结构(永久代--->元空间)
2. JDK8:lambda表达式
2.1 什么情况下可以使用lambda表达式
-
在给函数式接口提供实例时,都可以考虑使用lambda表达式。
-
基本语法的使用(重要)
2.2 函数式接口
-
常见的函数式接口。Comparator \ Runnable \ java.util.function下定义的丰富的函数式接口
消费型接口:Consumer<T> void accept(T t) 供给型接口:Supplier<T> T get() 函数型接口:Function<T,R> R apply(T t) 判断型接口:Predicate<T> boolean test(T t)
2.3 方法引用、构造器引用、数组引用
-
方法引用、构造器引用、数组引用:看做是lambda表达式的进一步刻画、表达。
-
(掌握)方法引用、构造器引用、数组引用的使用场景。
3. JDK8:Stream API的使用
-
Stream关注于内存中的多个数据的运算。
-
使用步骤:① Stream 的实例化 ② 一系列的中间操作 ③ 终止操作
4. JDK8之后的新特性:语法层面
-
jShell工具
-
try-catch结构的变化。try(...){ }
-
局部变量的类型推断:var
-
instanceof的模式匹配
-
switch表达式、switch的模式匹配
-
文本块的使用:"""文本块"""
-
新的引用数据类型:record (记录)
-
密封类:sealed class
5. JDK8之后的新特性:其它
-
Optional类的使用
-
其他:了解
二、企业真题
2.1 JDK8新特性
1. 谈谈java8新特性(京*旗下、时代*宇,信必*、招*信诺,中*外包,金*软件、阿**巴)
类似问题 > JDK1.8相较于JDK1.7有什么不一样?(惠*) > JDK1.8的新特性有哪些?Stream API + Lambda表达式,还有吗?(久*国际物流)
-
lambda表达式、Stream API
-
jdk7的对比:元空间、HashMap、新的日期时间API、接口变化等。
2. JDK1.8在数据结构上发生了哪些变化 ?(银*数据)
-
使用元空间替代永久代。 (方法区:jvm规范中提到的结构。
-
HotSpot来讲,jdk7:方法区的落地体现:永久代。 jdk8:方法区的落地体现:元空间。
-
-
HashMap底层结构
3. 你说的了解 Java的新特性 ,你说说JDK8改进的地方?(银*科技)
-
lambda表达式、Stream API
-
jdk7的对比:元空间、HashMap、新的日期时间API、接口变化等。
4. JDK1.8用的是哪个垃圾回收器?(O**O)
Parallel GC --> jdk9:默认使用G1GC --> ZGC (低延迟)
2.2 Lambda表达式
1. Lambda表达式有了解吗,说说如何使用的(O**O)
类似问题: > Lambda的理解(国*)
1. Lambda表达式的使用举例:
(o1, o2) -> Integer.compare(o1,o2);
2. Lambda表达式的格式举例:
lambda形参列表 -> lambda体
3. Lambda表达式的格式
-> : lambda操作符或箭头操作符
-> 的左边: lambda形参列表,对应着要重写的接口中的抽象方法的形参列表。
-> 的右边: lambda体,对应着接口的实现类要重写的方法的方法体。
4. Lambda表达式的本质:
> 一方面,lambda表达式作为接口的实现类的对象。 ---> "万事万物皆对象"
> 另一方面,lambda表达式是一个匿名函数。
2. 什么是函数式接口?有几种函数式接口(阿**巴)
java.util.function包下定义了丰富的好函数式接口。有4类基础的函数式接口:
消费型接口:Consumer<T> void accept(T t) 供给型接口:Supplier<T> T get() 函数型接口:Function<T,R> R apply(T t) 判断型接口:Predicate<T> boolean test(T t)
2.3 Stream API
1. 创建Stream的方式(阿**巴)
三种。
2. 你讲讲stream表达式是咋用的,干啥的?(中*国际,上海**网络)
> Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历等),面向CPU的。 集合关注的数据的存储,面向内存的。 > Stream API 之于集合,类似于SQL之于数据表的查询。
3. 集合用Stream流怎么实现过滤?(润*软件)
filter(Predicate predicate)
4. 用Stream怎么选出List里想要的数据?(惠*)
filter(Predicate predicate)
1. Stream API vs 集合框架
> Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历等),面向CPU的。
集合关注的数据的存储,面向内存的。
> Stream API 之于集合,类似于SQL之于数据表的查询。
2. 使用说明
①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。即一旦执行终止操作,就执行中间操作链,并产生结果。
④ Stream一旦执行了终止操作,就不能再调用其它中间操作或终止操作了。
3. Stream 执行流程
步骤1:Stream的实例化
步骤2:一系列的中间操作
步骤3:执行终止操作
2.4 其它版本新特性
1. 说说JDK15、JDK16、JDK17中的新特性都有什么?(银*数据)
略