java11新特性_Java程序员必须了解:Java11的重要性及新特性一览

一、Java11的重要性

Java 11于2018年9月26日发布,是继Java 8之后的第二个LTS版本。从Java 11以后,Oracle JDK将不再免费用于商业用途。

可以在开发阶段免费使用,但要如果要在商业上使用它,必须购买许可证。否则随时可能从Oracle获得发票账单!

Java 10是可以下载的最后一个免费的Oracle JDK。

Oracle从2019年4月开始停止Java 8免费支持。您需要支付费用如果需要更多支持,可以继续使用老版本,但不会获得任何补丁/安全更新。

36b2fd07244be287be92958dc88eeea5.png

从Java 11以后,Oracle不会为任何单个Java版本提供免费的长期支持(LTS)。

虽然Oracle JDK不再免费,但是始终可以从Oracle或其他提供商(如AdoptOpenJDK,Azul,IBM,Red Hat等)下载Open JDK版本。

您可以从https://jdk.java.net/11/下载生产就绪的OpenJDK版本。 二进制文件采用tar或zip格式,因此只需将它们解压缩并设置环境变量即可使用java编译器和java命令。

二、Java11新特性一览

e956058ee00ade7f873e03ac4343a22a.png

图1 Java11新特性一览

其中,标准HTTP Client升级特性最为重要,其次和开发者有关系的是使用单个命令运行Java文件、字符串方法增强、Lambda参数的局部变量语法、基于嵌套的访问控制和在文件中读取/写入字符串。

ZGC:可伸缩低延迟垃圾收集器是一个令人兴奋的特性,可惜地是现在处于实验性阶段。

1、标准HTTP Client升级

Java 11标准化了Http Client API。新Http Client API,提供了对HTTP/2等业界前沿标准的支持,同时也向下兼容HTTP/1.1,本身也支持WebSockets,精简友好的API接口,与主流开源API(如:Apache HttpClient、Jetty、OkHttp 等)类似甚至性能更高。

GET请求示例代码:

HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://openjdk.java.net/")) .build();client.sendAsync(request, BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join();

2、使用单个命令运行Java文件

该特性不需要首先使用javac工具编译java源文件。 您可以使用java命令直接运行该文件,并隐式编译。

例如:如果名为HelloWorld.java的文件包含一个名为hello.World的类,那么该命令:

$ java HelloWorld.java

等用于

$ javac HelloWorld.java$ java -cp . hello.World

3、字符串方法增强

增加了isBlank() 、lines()、strip()、stripLeading()、stripTrailing()、repeat(int)等方法。

4、Lambda参数的局部变量语法

该特性允许var用于声明隐式类型的lambda表达式的形式参数,我们现在可以使用:

(var s1, var s2) -> s1 + s2

可以让您将注释应用于局部变量和Lambda表达式:

(@Nonnull var s1, @Nonnull var s2) -> s1 + s2

5、基于嵌套的访问控制

假设有如下一段代码:

public class Main { public void myPublic() { } private void myPrivate() { } class Nested { public void nestedPublic() { myPrivate(); } }}

可以通过上述方式从上面的嵌套类访问主类的私有方法。

但是如果我们使用Java反射访问,它将给出IllegalStateException。

Method method = ob.getClass().getDeclaredMethod("myPrivate");method.invoke(ob);

Java 11嵌套访问控制在反射中解决了这个问题。

java.lang.Class在反射API中引入了三个方法:getNestHost,getNestMembers和isNestmateOf。

6、在文件中读取/写入字符串

Java 11致力于使String的读写更方便。

它介绍了以下用于读写文件的方法:

readString()

writeString()

下面的代码展示了一个这样的例子:

Path path = Files.writeString(Files.createTempFile("test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值