Java8新特性
对接口做了增强
- 引入了静态方法和实例方法
- default:允许在接口中定义带有具体实现的方法,使用default关键字修饰,可以this调用,可以被子类继承或重写。
- static:允许在接口中定义静态方法,使用static关键字修饰,类中的方法能被继承而接口中的方法不能被子类继承,只能用interface调用。
- 函数式接口:支持了Lambda表达式,推动函数式编程规范。
函数式接口
定义:也称SAM接口,Single Abstract Methods interfaces。有且只有一个抽象方法,但可以有多个非抽象方法的接口。java8中的java.util.function专门放函数式接口,这个包下的所有接口都带有@FunctionalInterface注解,提供函数式编程。
Lambda表达式
允许将函数作为参数进行传递,(参数 -> 返回参数要变成的样子)例如(a, b) -> a + b 就是返回a + b
(parameters) -> expression 或
(parameters) ->{ statements; }
只要方法的参数是函数式接口都可以使用Lambda表达式,lambda优点很多,但当调试的时候因为lambda是匿名的所以不知道是哪个lambda出问题了。
Stream流常用API
//收集长度大于3的字符串
List<String> originalList = Arrays.asList("apple", "fig", "banana", "kiwi");
List<String> filteredList = originalList.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList());
- Stream的并行Api
- ParallelStream,并行流就是将数据源分为多个子流对象进行多线程操作,然后再将流汇成一个总流对象,对CPU密集型操作来说友好。
java21新特性
语言特性
- 允许在switch的case语句中进行模式匹配
case savingsAccount sa -> result = sa.getSavings(); - 数组模式
将模式匹配引用到数组里
if (arr instanceof int[] {1, 2, 3})
并发特性
- 虚拟线程 通过共享堆栈的方法,大大降低内存的消耗,可以使用静态构建方法、构建器或ExecutorService来创建和使用虚拟线程。