面试官问我Java9~14的有哪些重要的新特性,我哭了~~~( 三 )


面试官问我Java9~14的有哪些重要的新特性,我哭了~~~文章插图
字符串加强Java 11 增加了一系列的字符串处理方法 , 如以下所示 。
Guide 哥:说白点就是多了层封装 , JDK 开发组的人没少看市面上常见的工具类框架啊!
//判断字符串是否为空" ".isBlank();//true//去除字符串首尾空格" Java ".strip();// "Java" //去除字符串首部空格" Java ".stripLeading();// "Java "//去除字符串尾部空格" Java ".stripTrailing();// " Java"//重复字符串多少次"Java".repeat(3);// "JavaJavaJava"//返回由行终止符分隔的字符串集合 。 "A\nB\nC".lines().count();// 3 "A\nB\nC".lines().collect(Collectors.toList()); ZGC:可伸缩低延迟垃圾收集器ZGC 即 Z Garbage Collector , 是一个可伸缩的、低延迟的垃圾收集器 。
ZGC 主要为了满足如下目标进行设计:

  • GC 停顿时间不超过 10ms
  • 即能处理几百 MB 的小堆 , 也能处理几个 TB 的大堆
  • 应用吞吐能力不会下降超过 15%(与 G1 回收算法相比)
  • 方便在此基础上引入新的 GC 特性和利用 colord
  • 针以及 Load barriers 优化奠定基础
  • 当前只支持 Linux/x64 位平台
ZGC 目前 处在实验阶段 , 只支持 Linux/x64 平台
标准 HTTP Client 升级Java 11 对 Java 9 中引入并在 Java 10 中进行了更新的 Http Client API 进行了标准化 , 在前两个版本中进行孵化的同时 , Http Client 几乎被完全重写 , 并且现在完全支持异步非阻塞 。
并且 , Java11 中 , Http Client 的包名由 jdk.incubator.http 改为java.net.http , 该 API 通过 CompleteableFuture 提供非阻塞请求和响应语义 。
使用起来也很简单 , 如下:
var request = HttpRequest.newBuilder().uri(URI.create("")).GET().build();var client = HttpClient.newHttpClient();// 同步HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());// 异步client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println); 简化启动单个源代码文件的方法
  • 增强了 Java 启动器 , 使其能够运行单一文件的 Java 源代码 。 此功能允许使用 Java 解释器直接执行 Java 源代码 。 源代码在内存中编译 , 然后由解释器执行 。 唯一的约束在于所有相关的类必须定义在同一个 Java 文件中
  • 对于 Java 初学者并希望尝试简单程序的人特别有用 , 并且能和 jshell 一起使用
  • 一定能程度上增强了使用 Java 来写脚本程序的能力
用于 Lambda 参数的局部变量语法
  • 从 Java 10 开始 , 便引入了局部变量类型推断这一关键特性 。 类型推断允许使用关键字 var 作为局部变量的类型而不是实际类型 , 编译器根据分配给变量的值推断出类型
  • Java 10 中对 var 关键字存在几个限制 只能用于局部变量上 声明时必须初始化 不能用作方法参数 不能在 Lambda 表达式中使用
  • Java11 开始允许开发者在 Lambda 表达式中使用 var 进行参数声明
其他特性