共计 2076 个字符,预计需要花费 6 分钟才能阅读完成。
现在 Java 有多元化的发展趋势,既有 JS 又有 C ++ 还有 C# 的影子,不学习那是不行滴。来来来,花 5 分钟看看 Java9-Java11 的七大新特性,还有代码样例。Java11 发布了,然而很多公司还在用 Java 8,这里简单介绍一下 Java 9 -11 引入的新语法和 API。本地变量类型推断 Java 10 就已经引入了新关键词 var,该关键词可以在声明局部变量的时候替换类型信息。本地(local)是指方法内的变量声明。Java 10 之前,你需要这样声明一个 String 对象。
在 Java10 里头可以使用 var 替代 String,表达式变成这样:
用 var 声明的变量仍然是静态类型的。不兼容的类型无法重新分配给此类变量。此代码段无法编译:
当编译器无法推断出正确的变量类型时,也不允许使用 var。以下所有代码示例都会导致编译器错误:
局部变量类型推断可以泛型。在下一个示例中,Map <String,List <Integer >> 类型,可以将其简化为单个 var 关键字,从而避免大量样板代码:
从 Java 11 开始,lambda 参数也允许使用 var 关键字:
HTTP ClientJava 9 开始引入 HttpClient API 来处理 HTTP 请求。从 Java 11 开始,这个 API 正式进入标准库包(http://java.net)。让我们来探索一下我们可以用这个 API 做些什么。新的 HttpClient 可以同步或异步使用。同步请求会阻止当前线程。BodyHandlers 定义响应体的预期类型(例如,字符串,字节数组或文件):
也可以使用异步来执行相同的请求。调用 sendAsync 不会阻止当前线程,而是返回 CompletableFuture 来进行异步操作。
我们可以省略.GET(),因为它是默认的请求方法。下一个示例通过 POST 将数据发送到给定的 URL。与 BodyHandler 类似,您使用 BodyPublishers 定义作为请求主体发送的数据类型,如字符串,字节数组,文件或输入流:
最后一个例子演示了如何通过 BASIC-AUTH 执行授权:
CollectionsList,Set 和 Map 等集合已经用新方法扩展。List.of 从给定的参数创建了一个新的不可变列表。List.copyOf 创建列表的不可变副本。
因为 list 已经是不可变的,所以实际上不需要实际创建 list 实例的副本,因此 list 和副本是相同的实例。但是,如果你复制一个可变 list,那么复制确实会生成一个新实例,因此保证在改变原始 list 时没有副作用:
创建不可变 map 时,您不必自己创建 map 条目,而是将键和值作为参数传递:
Java 11 中的不可变集合仍然使用 Collection API 中的老接口。但是,如果尝试修改不可变集合,则会抛出 java.lang.UnsupportedOperationException。可喜的是,如果尝试改变不可变集合,Intellij IDEA 会通过发出警告 StreamsStreams 是在 Java 8 中引入的,Java 9 增加了三个新方法。单个参数构造方法:
增加 takeWhile 和 dropWhile 方法,用于从 stream 中释放元素:
如果对 Stream 不熟,可以参考这篇文章 [1]。OptionalsOptionals 提供了一些非常方便的功能,例如 您现在可以简单地将 Optional 转换为 Stream,或者为空 Optinal 提供另一个 Optional 作为备胎:
StringsJava11 给 String 增加了一些辅助方法来修剪或检查空格等功能:
InputStreamsInputStream 增加了 transferTo 方法,可以用来将数据直接传输到 OutputStream:
其他的一些 VM 特性 从 Java 8 到 Java 11 引入了很多新特性,以下是这些特性的列表:· Flow API for reactive programming· Java Module System· Application Class Data Sharing· Dynamic Class-File Constants· Java REPL (JShell)· Flight Recorder· Unicode 10· G1: Full Parallel Garbage Collector· ZGC: Scalable Low-Latency Garbage Collector· Epsilon: No-Op Garbage Collector· Deprecate the Nashorn JavaScript Engine 译者注:对于译者来说还是 Application Class-Data Sharing(CDS),ZGC 和 Flight Recorder 比较有吸引力一点。关于 ZGC, 可以参考前段时间高可用架构关于 ZGC 的文章。原文地址:https://winterbe.com/posts/20… 本文作者 Benjamin,由方圆翻译。转载自公众号高可用架构
网易云信,你身边的即时通讯和音视频技术专家,了解我们,请戳网易云信官网想要阅读更多行业洞察和技术干货,请关注网易云信博客更多精彩内容,关注网易云信知乎机构号哦。