当前位置: 首页 > 科技观察

5分钟了解Java9~Java11的七大新特性

时间:2023-03-12 19:29:30 科技观察

Java11已经发布,但是很多公司还在使用Java8,本文将简单介绍一下Java9-11引入的新语法和API。局部变量类型推断Java10引入了一个新的关键字var,它可以在声明局部变量时替换类型信息。本地是指方法内的变量声明。在Java10之前,您需要像这样声明一个String对象。在Java10中,可以用var代替String,表达式变成这样:用var声明的变量仍然是静态类型的。不能将不兼容的类型重新分配给此类变量。此代码段无法编译:当编译器无法推断出正确的变量类型时,也不允许使用var。以下所有代码示例都会导致编译器错误:局部变量类型推断可以是通用的。在下一个例子中,Map从Java11开始,lambda参数也允许使用var关键字:HTTPClientJava9开始引入HttpClientAPI来处理HTTP请求。从Java11开始,该API正式进入标准库包(java.net)。让我们探索一下我们可以用这个API做什么。可以同步或异步使用新的HttpClient。同步请求阻塞当前线程。BodyHandlers定义预期的响应主体类型(例如,字符串、字节数组或文件):同样的请求也可以使用异步执行。调用sendAsync不会阻塞当前线程,而是返回一个CompletableFuture用于异步操作。我们可以省略.GET因为它是默认的请求方法。下一个示例通过POST将数据发送到给定的URL。与BodyHandler类似,您使用BodyPublishers来定义作为请求主体发送的数据类型,例如字符串、字节数组、文件或输入流:***示例演示如何通过BASIC-AUTH执行授权:CollectionsList、Set和Map等.集合已使用新方法扩展。List.of根据给定的参数创建一个新的不可变列表。List.copyOf创建列表的不可变副本。因为list已经是不可变的了,其实没有必要去实际创建一个list实例的副本,所以list和copy是同一个实例。然而,如果你复制一个可变列表,副本确实会生成一个新实例,所以保证在改变原始列表时没有副作用:当创建一个不可变映射时,你不必自己创建映射条目,而是将键和值作为参数传递:Java11中的不可变集合仍然使用CollectionAPI中的旧接口。但是,如果尝试修改不可变集合,则会抛出java.lang.UnsupportedOperationException。好消息是,如果您尝试改变不可变集合,IntellijIDEA会发出警告。StreamsStreams是在Java8中引入的,Java9增加了三个新的方法。单参数构造方法:添加takeWhile和dropWhile方法,从stream中释放元素:如果对Stream不熟悉,可以参考这篇文章[1]。OptionalsOptionals提供了一些非常方便的功能,例如,您现在可以简单地将一个Optional转换为Stream,或者提供另一个Optional作为空Optional的备份:StringsJava11为String添加了一些辅助方法来修剪或检查空格等:InputStreamsInputStream添加了transferTo方法,可用于将数据直接传输到OutputStream:其他VM特性从Java8到Java11引入了许多新特性,以下是这些特性的列表:FlowAPIforreactiveprogrammingJavaModule系统应用程序类数据共享动态类文件常量JavaREPL(JShell)FlightRecorderUnicode10G1:完全并行垃圾收集器ZGC:可扩展低延迟垃圾收集器Epsilon:No-Op垃圾收集器弃用NashornJavaScript引擎或应用程序类数据共享(CDS)、ZGC和FlightRecorder更具吸引力。关于ZGC,可以参考前段时间关于高可用架构ZGC的文章。原文地址:https://winterbe.com/posts/2018/09/24/java-11-tutorial/