写点什么

进击的 Java(四)

作者:ES_her0
  • 2021 年 11 月 12 日
  • 本文字数:1140 字

    阅读完需:约 4 分钟

上篇聊到 Java9 的模块化,Java9 的主要更新也就讲完了。紧接着是 10 和 11,这是两个匆忙的版本,没更新多少实质的内容,但因为这个阶段已经是半年一更新的节奏了,所以也没法放太多的东西,尤其是 Java10,几乎没更新什么,但又好像变化挺大的。下面一起来看看。

var 类型

首次出现在 Java10 中,也首次出现在 Java 中。开什么玩笑,Java 一向是一个严谨的语言,怎么会允许若类型的 var 变量出现呢?没错,这就是现实,但 var 只能是局部变量,全局变量还是得乖乖标明类型。以我来看,var 就应该普及,剩下的就交给编译器本身的类型推断。像 kotlin,上来就是 var 和 val,也没觉得突兀,也不影响它是个静态强类型语言。对于开发者来说,写一行代码能少敲好几次键盘。

Java10 的更新就是这个。

全新的 HTTP client API

这个 api 首次出现在 9 之中,当时并非一个稳定版本,在 11 中正式发布。原来 jdk 的 http 客户端真的难用,这也给了很多像 okhttp、restTemplate 和 feign 这样的第三方库极大的发挥空间,几乎是没人用原生的 http 客户端的。但现在不一样了,确实感觉是新时代的 API 了。

  1. 同步请求

HttpClient client = HttpClient.newBuilder()        .version(Version.HTTP_1_1)        .followRedirects(Redirect.NORMAL)        .connectTimeout(Duration.ofSeconds(20))        .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))        .authenticator(Authenticator.getDefault())        .build();   HttpResponse<String> response = client.send(request, BodyHandlers.ofString());   System.out.println(response.statusCode());   System.out.println(response.body()); 
复制代码
  1. 异步请求

HttpRequest request = HttpRequest.newBuilder()        .uri(URI.create("https://foo.com/"))        .timeout(Duration.ofMinutes(2))        .header("Content-Type", "application/json")        .POST(BodyPublishers.ofFile(Paths.get("file.json")))        .build();   client.sendAsync(request, BodyHandlers.ofString())        .thenApply(HttpResponse::body)        .thenAccept(System.out::println);
复制代码

这是官方的 demo,好用的不像 jdk。

Lambda 表达式中支持 var 变量

Java10 支持了局部的 var,11 进一步让 Lambda 中也可以写 var 类型的局部变量,有了局部变量的命名之后也可以做一些事情,比如:

(@NonNull var x) -> process(x)
复制代码

新的 String 方法

  • repeat:重复生成字符串

  • isBlank:不用在引入第三方库就可以实现字符串判空了

  • strip:去除字符串两边的空格,支持全角和半角,之前的 trim 只支持半角

  • lines:能根据一段字符串中的终止符提取出行为单位的流

ZGC

这在 11 中还是试验性的功能,一直到 15 发放出稳定版。据说性能很强。

以上就是 Java10 和 11 两个版本更新的内容。


用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
进击的Java(四)