JavaGuide-JDK新特性-笔记007

Java JDK新特性部分

JavaGuide面试题博文:https://javaguide.cn/。
本文是学习笔记,如果需要面试没有时间阅读原博文,可以快速浏览笔记。
推荐深度阅读对应书籍或者知识点原文,避免碎片化学习。

001.Java8新特性

为了解决接口的修改与现有的实现不兼容的问题,新interface的方法可以用defaultstatic修饰。
函数式接口,也称SAM接口,SingleAbstractMethodinterfaces,有且只有一个抽象方法,但可以有多个非抽象方法的接口。
java.util.function该包下的所有接口都有@FunctionalInterface注解,提供函数式编程。
Lambda表达式是一个匿名函数,java8允许把函数作为参数传递进方法中。方法的参数是函数式接口都可以用Lambda表达式(parameters) ->{ statements; }
Java8允许使用::关键字来传递方法或者构造函数引用,无论如何,表达式返回的类型必须是functional-interface
lambda表达式可以引用外边变量,但是该变量默认拥有final属性,不能被修改,如果修改,编译时就报错。
新增了java.util.stream,不存储数据,可以检索和逻辑处理集合数据、包括筛选、排序、统计、计数等,类Sql语句,它的方法参数都是函数式接口类型,所以一般和 Lambda 配合使用。
stream串行流,parallelStream并行流,可多线程执行。
使用Optional解决NPE问题。
新增java.time.LocalDateTimeLocalDateLocalTime日期计算,获取指定日期,时区操作。
默认垃圾回收器是ParallelScavenge+ParallelOld

002.Java9新特性

新增在JShell中可以直接输入表达式并查看其执行结果。
引入了模块系统,JDK被重新组织成94个模块,通过jlink创建出只包含所依赖的JDK模块的自定义运行时镜像。
G1Garbage-First Garbage Collector)成为了默认垃圾回收器。
增加了List.of()Set.of()Map.of()Map.ofEntries()等工厂方法来创建不可变集合。
使用of()创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报java.lang.UnsupportedOperationException异常。
String的实现从char[]改用byte[]数组存储字符串。
Java9允许在接口中使用私有方法private
try-with-resources语句中可以使用effectively-final变量,没有被final修饰但是值在初始化后从未更改的变量。
Stream中增加了新的方法ofNullable()dropWhile()takeWhile()以及iterate()方法的重载方法。
增加了java.lang.ProcessHandle接口来实现对原生进程进行管理,尤其适合于管理长时间运行的进程。
java.util.concurrent.Flow 类中新增了反应式流规范的核心接口,包含了Flow.PublisherFlow.SubscriberFlow.SubscriptionFlow.Processor4个核心接口。
Java9还提供了SubmissionPublisher作为Flow.Publisher的一个实现。
变量句柄java.lang.invoke.VarHandle来表示,替代了java.util.concurrent.atomicsun.misc.Unsafe的部分操作。提供了一系列标准的内存屏障操作,用于更加细粒度的控制内存排序。

003.Java10新特性

局部变量类型推断(var),只能用于带有构造器的局部变量和for循环中。
通过引入一套纯净的垃圾收集器接口来将不同垃圾收集器的源代码分隔开。
Java9G1FullGC依然是使用单线程去完成标记清除算法,改为并行的标记清除算法,同时会使用与年轻代回收和混合回收相同的并行工作线程数量。
ListSetMap提供了静态方法copyOf()返回入参集合的一个不可变拷贝。
Optional 新增了orElseThrow()方法来在没有值时抛出指定的异常。
HotSpot附带两个用C++实现的JITcompilerC1C2,新增基于Java语言编写的JIT编译器Graal

004.Java11新特性

Http Client几乎被完全重写,并且现在完全支持异步非阻塞。
String增强。isBlankstriprepeat
新增isEmpty()方法来判断指定的Optional对象是否为空。
Z Garbage Collector,是一个可伸缩的、低延迟的垃圾收集器
Lambda表达式中使用var进行参数声明。
启动单文件源代码程序,不需要在磁盘上生成.class文件了。

005.Java12新特性

String增强,indent()方法可以实现字符串缩进。transform()方法可以用来转变指定字符串。
Files增强,mismatch()方法用于比较两个文件,并返回第一个不匹配字符的位置,如果文件相同则返回-1L
NumberFormat新增了对复杂的数字进行格式化的支持。
G1收集器优化,可中止的混合收集集合,及时返回未使用的已分配内存。

006.Java13新特性

增强ZGC,将向操作系统返回被标识为长时间未使用的页面,这样它们将可以被其他进程重用。
SocketAPI的底层进行了重写,NioSocketImpl是对PlainSocketImpl的直接替代,它使用java.util.concurrent包下的锁而不是同步方法。
FileSystems增强,newFileSystem(Path)``newFileSystem(Path, Map)``newFileSystem(Path, Map, ClassLoader)
允许在Java应用程序执行结束时动态进行类归档,提高了应用程序类数据共享(AppCDS)的可用性。

007.Java14新特性

JVM参数中添加-XX:+ShowCodeDetailsInExceptionMessages,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题。
switch表达式引入了类似lambda语法条件匹配成功后的执行块,不需要多写breakJava13提供了yield来在block中返回值。

008.Java15新特性

CharSequence接口添加了一个默认方法isEmpty()来判断字符序列为空,如果是则返回true
TreeMap新引入了下面这些方法:putIfAbsent()computeIfAbsent()computeIfPresent()compute()merge()
文本块。
隐藏类是为框架(frameworks)所设计的,隐藏类不能直接被其他类的字节码使用,只能在运行时生成类并通过反射间接使用它们。

009.Java16新特性

向量API(第一次孵化)
启用C++14语言特性
ZGC并发线程堆栈处理
弹性元空间
对基于值的类发出警告
引入了打包工具,命令是jpackage
引入外部内存访问API以允许Java程序安全有效地访问Java堆之外的外部内存。
instanceof 模式匹配
引入record 关键字,record提供一种紧凑的语法来定义类中的不可变数据。
会默认强封装JDK的所有内部元素,但关键内部API(例如 sun.misc.Unsafe)除外。

010.Java17新特性

RandomThreadLocalRandomSplittableRandom来生成随机数各有缺陷,增加RandomGenerator
弃用Applet API以进行删除。
switch的类型匹配自动转换功能。
删除远程方法调用(RMI)激活机制,同时保留RMI的其余部分。RMI激活机制已过时且不再使用。
弃用安全管理器以进行删除。

011.Java18新特性

UTF-8设置为默认字符集
使用jwebserver命令启动一个简易的静态 Web 服务器。
改进了java.lang.reflect.MethodConstructor的实现逻辑,使用方法句柄重新实现反射核心。
全新的SPI,用于主要名称和地址的解析,以便java.net.InetAddress可以使用平台之外的第三方解析器。

012.Java19新特性

通过该APIJava运行时之外的代码和数据进行互操作。通过高效地调用外部函数和安全地访问外部内存,
API使Java程序能够调用本机库并处理本机数据,而不会像JNI那样危险和脆弱。
虚拟线程。
结构化并发,一种多线程编程方法,目的是为了通过结构化并发API来简化多线程编程,并不是为了取代java.util.concurrent

013.Java20新特性

作用域值(Scoped Values)它可以在线程内和线程间共享不可变的数据,优于线程局部变量,尤其是在使用大量虚拟线程时。

014.Java21新特性

字符串模板通用定义,动态构建字符串,通过使用占位符${},我们可以将变量的值直接嵌入到字符串中,而不需要手动处理。
字符串模板java实现String message = STR."Greetings \{name}!"
STRFMTRAW模板处理器。\{name}为表达式,运行时,这些表达式将被相应的变量值替换。
Sequenced Collections具有确定出现顺序的集合。ListDeque接口实现了SequencedCollection接口。
分代ZGC
未命名模式和变量使得我们可以使用下划线 _ 表示未命名的变量以及模式匹配时不使用的组件,旨在提高代码的可读性和可维护性。

以上是Java语言的核心知识点第七篇总结,希望对大家有所帮助。

你可能感兴趣的:(面试笔记,面试,java)