59

5分钟学会Java 9~Java11的七大新特性

 5 years ago
source link: http://developer.51cto.com/art/201809/584465.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

QZvYVnn.gif

Java11 发布了,然而很多公司还在用Java 8 ,本文会简要介绍Java 9 -11 引入的新语法和API。

本地变量类型推断

Java 10 就已经引入了新关键词var,该关键词可以在声明局部变量的时候替换类型信息。本地(local)是指方法内的变量声明。

Java 10之前,你需要这样声明一个String对象。

fqyYRjq.jpg!web

在Java10里头可以使用var替代String,表达式变成这样:

eINFneq.jpg!web

用var声明的变量仍然是静态类型的。 不兼容的类型无法重新分配给此类变量。 此代码段无法编译:

NNZJB3n.jpg!web

当编译器无法推断出正确的变量类型时,也不允许使用var。 以下所有代码示例都会导致编译器错误:

JZbARjr.jpg!web

局部变量类型推断可以泛型。 在下一个示例中,Map

y6nmQbV.jpg!web

从Java 11开始,lambda参数也允许使用var关键字:

zaUjQvE.jpg!web

HTTP Client

Java 9开始引入HttpClient API来处理HTTP请求。 从Java 11开始,这个API正式进入标准库包(java.net)。 让我们来探索一下我们可以用这个API做些什么。

新的HttpClient可以同步或异步使用。 同步请求会阻止当前线程。 BodyHandlers定义响应体的预期类型(例如,字符串,字节数组或文件):

Qry6z2e.jpg!web

也可以使用异步来执行相同的请求。 调用sendAsync不会阻止当前线程,而是返回CompletableFuture来进行异步操作。

AVz63mI.jpg!web

我们可以省略.GET,因为它是默认的请求方法。

下一个示例通过POST将数据发送到给定的URL。 与BodyHandler类似,您使用BodyPublishers定义作为请求主体发送的数据类型,如字符串,字节数组,文件或输入流:

BRFzQnI.jpg!web

最后一个例子演示了如何通过BASIC-AUTH执行授权:

MZreIf3.jpg!web

Collections

List,Set和Map等集合已经用新方法扩展。 List.of从给定的参数创建了一个新的不可变列表。 List.copyOf创建列表的不可变副本。

vEJ3umU.jpg!web

因为list已经是不可变的,所以实际上不需要实际创建list实例的副本,因此list和副本是相同的实例。 但是,如果你复制一个可变list,那么复制确实会生成一个新实例,因此保证在改变原始list时没有副作用:

EJFNNzV.jpg!web

创建不可变map时,您不必自己创建map条目,而是将键和值作为参数传递:

Nf2eiiv.jpg!web

Java 11中的不可变集合仍然使用Collection API中的老接口。 但是,如果尝试修改不可变集合,则会抛出java.lang.UnsupportedOperationException。 可喜的是,如果尝试改变不可变集合,Intellij IDEA会通过发出警告。

Streams

Streams是在Java 8中引入的,Java 9增加了三个新方法。 单个参数构造方法:

2mMfauF.jpg!web

增加 takeWhile 和 dropWhile 方法,用于从stream中释放元素:

Zzaayqb.jpg!web

如果对Stream不熟,可以参考这篇文章[1]。

Optionals

Optionals提供了一些非常方便的功能,例如 您现在可以简单地将Optional转换为Stream,或者为空Optinal提供另一个Optional作为备胎:

q6Zvq2j.jpg!web

Strings

Java11 给String增加了一些辅助方法来修剪或检查空格等功能:

a6bENzV.jpg!web

InputStreams

InputStream增加了transferTo方法,可以用来将数据直接传输到 OutputStream:

6jERj2y.jpg!web

其他的一些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/2018/09/24/java-11-tutorial/

【责任编辑:庞桂玉 TEL:(010)68476606】


Recommend

  • 81
    • developer.51cto.com 6 years ago
    • Cache

    Java 9逆天的十大新特性

    现在好多人还在用Java SE 6,还有一部分人Java SE 8还没玩明白呢,Java SE 9已经粉末登场了。在Open JDK的官网上看到了Java 10的标准也在制定当中,Java的发展真的越来越快了。

  • 73
    • 掘金 juejin.im 5 years ago
    • Cache

    Java11 HttpClient小试牛刀

    序 本文主要研究一下Java11的HttpClient的基本使用。 变化 从java9的jdk.incubator.httpclient模块迁移到java.net.http模块,包名由jdk.incubator.http改为java.net.http 原来的

  • 59

    主题互动 Java11已经发布了,我们今天聊聊大家还停留在哪个版本呢?大家对于新版本的迅速的发布有什么想说的呢? 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。 我们都知道,前面的几个版本都不是长期

  • 55
    • lexburner.github.io 5 years ago
    • Cache

    Dubbo2.7 三大新特性详解

    自 2017 年 7 月阿里重启 Dubbo 开源,到目前为止 github star 数,contributor 数都有了非常大的提升。2018 年 2 月 9 日阿里决定将 Dubbo 项目贡献给 Apache,经过一周的投票,顺利成为了 Apache 的孵化项目,也就是大家现在看到的

  • 38

    Java - @cco - RT,或者用 8 以上的也行吧。

  • 25
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    Java11升级:“债务”“危机”

    作者| 江丹阳(Mario)  出品|阿里巴巴新零售淘系技术部 导读:

  • 2

    5分钟学会Java9-Java11的七大新特性 - 云信博客 > IM即时通信 > 5分钟学会Java9-Java11的七大新特性

  • 4

    Java11之前的java.lang.·System.getProperty() 对性能有影响'java.lang.System.getProperty()' 是 Java 开发人员用来读取在应用程序启动期间配置的系统属性的常用 API。即,当您将“-DappName=buggyApp”作为应用程序的启动 JVM 参数传递时,可以通过调用“java.la...

  • 2

    2月更新!EasyOps又迎来新升级,解锁9大新特性 EASYOPS_youwei · 1...

  • 1

    [译]Chrome开发者工具中评估性能的五大新特性摘自:Chrome DevTools Revolutions 2013

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK