当前位置: 首页 > 编程日记 > 正文

Java 11 正式发布!

有多少语言在提刀想反超 Java 的路上?但万万没想到,人家并未当回事,如今这款常青藤甚至越跑越欢,当我们还在使用 Java 7/8 时,它已经一路跑到了 11。

640?wx_fmt=jpeg

和预期的时间差不多,北京时间 9 月 26 日,Oracle 官方宣布 Java 11  (18.9 LTS) 正式发布,可供生产环境中使用,此次版本的更新,不仅提高了工作效率,也提供了 HTTP/2 Client API

同时,这也是自 Oracle 宣布以六个月为周期更新后发布的第一个长期支持版本。下载地址如下:

  • https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html


JDK 11 主要特性


最新发布的 JDK 11 共带来了 17 项更新:

  • 181:Nest-Based Access Control(基于嵌套的访问控制

  • 309:Dynamic Class-File Constants(动态类文件常量

  • 315: Improve Aarch64 Intrinsics(改进 Aarch64 内部函数

  • 318:Epsilon: A No-Op Garbage Collector(Epsilon:No-Op 垃圾收集器

  • 320:Remove the Java EE and CORBA Modules(删除 Java EE 和 CORBA 模块)

  • 321:HTTP Client (Standard)(HTTP 客户端

  • 323:Local-Variable Syntax for Lambda Parameters(Lambda 参数的变量语法)

  • 324:Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)

  • 327:Unicode 10

  • 328:Flight Recorder(飞行记录器

  • 329:ChaCha20 and Poly1305 Cryptographic Algorithms(ChaCha20 和 Poly1305 加密算法

  • 330:Launch Single-File Source-Code Programs(启动单文件源代码程序)

  • 331:Low-Overhead Heap Profiling(低开销堆分配采样方法)

  • 332: Transport Layer Security (TLS) 1.3(TLS 1.3 的传输层安全性)

  • 333:ZGC: A Scalable Low-Latency Garbage Collector(Experimental)(ZGC:可扩展的低延迟垃圾收集器,在实验阶段)

  • 335:Deprecate the Nashorn JavaScript Engine(弃用 Rhino JavaScript 引擎)

  • 336:Deprecate the Pack200 Tools and API(弃用 Pack200 工具和 API)

从开发者的角度来看,上面的特性中有几点需要特别关注。

JEP 323 实现了 Java 10 中引入的局部变量类型推断的扩展。类型推断是从其余源代码和键入规则中推导出的数据类型。这节省了开发者的工作时间,且不会使源代码过于复杂,而提高了可读性。

从 Java 10 开始,可以使用关键字 var 声明局部变量,如下所示:

// Funktioniert seit Java 10

var zahl = 5// int
var string = "Hello World"// String
var objekt = BigDecimal.ONE; // BigDecimal

在 Java 11 中,不同点在于开发者可以使用 var 声明 lambda 参数。乍一看,这一举措似乎有点多余,因为在写代码过程中可以省略 lambda 参数的类型,并通过类型推断确定它们。但是,扩展名对于使用 @Nonnull 和 @Nullable 等类型注释很有用。

// Inference von Lambda-Parametern
Consumer<String> printer = (var s) -> System.out.println(s); // statt s -> System.out.println(s);

// aber keine Mischung von "var" und deklarierten Typen möglich
// BiConsumer<String, String> printer = (var s1, String s2) -> System.out.println(s1 + " " + s2);

// Nützlich für Type Annotations
BiConsumer<String, String> printer = (@Nonnull var s1, @Nullable var s2) -> System.out.println(s1 + (s2 == null ? "" : " " + s2));

JDK 11 中另一个亮点在于仍处于实验阶段的新 HTTP Client API 的标准化,该 API 在 JDK 9 中被引入,在 JDK 10 中进行了更新,在本次 JDK 11 中包名由 jdk.incubator.http 改为 java.net.http。HTTP Client API 除了实现了HTTP(1.1和2)、WebSocket,同步和异步调用以及 Reactive Streams 现在也受支持。还使用清晰易懂的 Fluent 界面,将来可能会淘汰其他 HTTP 客户端(如 Apache)的使用。

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

JEP 330(启动单文件源代码程序)现在可以启动尚未编译的类。如今单文件程序在编写小实用程序时很常见,特别是脚本语言领域。从中开发者可以省去用 Java 编译程序等不必要工作,以及减少新手的入门障碍。在基于 Java 10 的程序中可以通过三种方式启动:

  • 作为* .class文件

  • 作为* .jar文件中的主类

  • 作为模块中的主类

现在,Java 11 中可以在源代码文件中声明类:

# java HelloWorld.java
// statt
# javac HelloWorld.java
# java -cp . hello.World

在 Unix 操作系统上,Java 文件甚至可以直接作为 Shebang 文件执行:

#!/path/to/java --source version

# ./HelloWorld.java

其他值得注意的变化包括支持 Unicode 10 标准以及将 Profiler Flight Recorder 集成到 OpenJDK 中(之前仅适用于 Oracle JDK)。Flight Recorder 的目标是尽可能高效地记录应用程序数据,以便在出现问题时分析 Java 应用程序和 JVM。

API 的变化

此外,Java 类库也有不少小的改动。 特别是字符串:

|  Welcome to JShell -- Version 11
|  For an introduction type: /help intro
// Unicode zu String
jshell> Character.toString(100)
$1 ==> "d"
jshell> Character.toString(66)
$2 ==> "B"

// Zeichen mit Faktor multiplizieren
jshell> "-".repeat(20)
$3 ==> "--------------------"

// Enthält ein Text keine Zeichen (höchstens Leerzeichen)?
jshell> String msg = "hello"
msg ==> "hello"
jshell> msg.isBlank()
$5 ==> false
jshell> String msg = "  "
msg ==> "  "
jshell> msg.isBlank()
$7 ==> true

// Abschneiden von führenden oder nachgelagerten Leerzeichen
jshell> " hello world ".strip()
$8 ==> "hello world"
jshell> "hello world    ".strip()
$9 ==> "hello world"
jshell> "hello world    ".stripTrailing()
$10 ==> "hello world"
jshell> "        hello world    ".stripLeading()
$11 ==> "hello world    "
jshell> "    ".strip()
$12 ==> ""

// Texte zeilenweise verarbeiten
jshell> String content =  "this is a multiline content\nMostly obtained from some file\rwhich we will break into lines\r\nusing the new api"
content ==> "this is a multiline content\nMostly obtained fro ... ines\r\nusing the new api"
jshell> content.lines().forEach(System.out::println)
this is a multiline content
Mostly obtained from some file
which we will break into lines
using the new api

Java 11 计划于本月,即 9 月 25 日发布。与 Java 10 不同,Java 11 不仅提供了长期支持,还将作为 Java 平台的参考实现。新的长期支持版本每三年发布一次,根据后续的发布计划,Java 17 将于 2021 年发布。

Java 11:删除了什么?

Oracle JDK 将不再包含 JavaFX(OpenJDK 从未提供过)。相反,JavaFX 通过 OpenJFX 作为单独的下载提供,并且可以像任何 Java 应用程序中的任何其他库一样使用。除 JavaFX 外,还将停止对 Applet 和 Java Web Start 的支持。如果仍然想使用 Java Web Start,那么必须保持在 JDK 8 的版本,直至 Oracle 停止免费更新后,花钱购买该服务。

另一个在 Java 11 中被弃用的 JavaScript 引擎 Rhino。预计它将在 Java 的未来版本中彻底消失。不过值得注意的是,Rhino 从未真正将自己断言为 Node.js 上的服务器端 JavaScript 实现基础。通过 GraalVM,Oracle 现在采用其他方式在 JVM 上本地运行其他编程语言。

顺便说一下,从 Java 11 开始,Java 运行时环境(JRE)将仅存在于服务器版本中,而不再存在于桌面中。但是,对于具有模块系统和 jlink 工具的桌面应用程序,开发者现在可以轻松创建或调整运行时环境。


JDK 11 是否值得更新?


今年四月,Oracle 发布官方声明表示即将停止对 JDK 8 的正常支持(免费更新):

2019 年 1 月之后,Oracle 将不会在其网站上发布 Java SE 8 商业使用的进一步更新下载。如需持续获取安全的 Bug 修复和安全补丁以及 Java SE 8 或以前版本的稳定性支持,可以通过 Oracle Java SE 高级版、Oracle Java SE 高级桌面、或 Oracle  Java SE 套件。

640?wx_fmt=jpeg

这意味着,在 2019 年 1 月之后,开发者想要使用老版本只能付费了,从中也侧面看出,Oracle 在间接性鼓励用户主动升级。不过,据各种对 Java 用户调查如 Jaxenter 发现,大多数的开发者依旧停留在 Java 8 以内的版本。

640?wx_fmt=jpeg

其实,这也不足为怪,当开发者刚开始吐槽新版本带来的问题时,Java 已搭载上了火箭更新到了下一版本,让大家措手不及。此前,就连 Java Collection Framework 的创建者 Josh Bloch 都在吐槽 Java 9 模块系统(Project Jigsaw)带来令人头痛的问题,甚至建议:

现在说 Project Jigsaw 将在 JDK 之外实现广泛使用还为时过早。与此同时,除非你有迫切需要,否则最好避免使用它们。

那么对于 JDK 11 是否值得立即更新使用?按照 Oracle 公布支持的路线图来看,如文章开头所述,Java 11 将会获得 Oracle 长期的服务支持,直至 2026 年 9 月。相比 Java 9 和 10 这两个仅提供半年技术支持的版本来说,JDK 11 的发布无疑对个人开发者以及企业都是一件好事。

640?wx_fmt=png

那么,再结合其新特性,你会选择更新到 JDK 11 吗?


--【完】--


寻找2018最佳AI应用案例

AI科技大本营希望找到在汽车、金融、教育、医疗、安防、零售、家居、文娱、工业等 9 大行业的最佳 AI 应用案例,记录 AI 时代影响人类发展的变革性产品/解决方案。


如果您有优秀的 AI 产品/技术解决方案,欢迎【扫码提交】,参与评选。


640?wx_fmt=jpeg


点击「阅读原文」,查看案例分享者特别奖励

相关文章:

linux php进程端口占用,linux如何查看端口占用情况

在linux中可以使用lsof和netstat命令来查看端口占用情况&#xff0c;其中lsof语法为“lsof -i:端口号”&#xff0c;netstat语法为“netstat -tunlp | grep 端口号”。Linux 查看端口占用情况Linux 查看端口占用情况可以使用 lsof 和 netstat 命令。lsoflsof(list open files)是…

高性能NoSql数据库 SSDB

今天在看一个开源项目的时候&#xff0c;发现作者使用一个ssdb的数据库&#xff0c;第一反应是ssd硬盘&#xff0c;当时很诧异。后面了解后才知道&#xff0c;原来是 nosql数据库。 ssdb介绍 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. SSDB 是一个 C/C 语…

System.Transactions介绍

在.Net Framework 2.0中&#xff0c;新增了一个名称空间&#xff1a;System.Transactions。从其名字就可以看出来&#xff0c;里面包含了Transaction相关的类。System.Transactions提供了一个“轻量级”的、易于使用的Transaction框架。 在以前&#xff0c;要实现Transaction需…

Compression Helper Class using SharpZipLib

使用 SharpZipLib 进行压缩的辅助类&#xff0c;简化压缩字节数组和字符串的操作。 usingSystem;usingSystem.Text;usingSystem.IO;usingICSharpCode.SharpZipLib.BZip2;usingICSharpCode.SharpZipLib.GZip;usingICSharpCode.SharpZipLib.Zip;namespaceCompression{ /**////…

matlab 线模式密度,环形腔窄线宽光纤激光器的研究

河北工业大学硕士2016环形腔窄线宽光纤激光器的研究Studt on Circular Cavity Fiber Laser with Narrow Line-width Output翟增武康志龙集成电路工程(专业学位)光纤激光器的主要特点就是指以光纤作为谐振腔的同时充当着光波导的角色。相比于气体激光器、固体激光器等其他的激光…

sql server 查看对象最后修改时间

sql server 查看对象最后修改时间&#xff0c;根据最后修改时间排序 存储过程 SELECT * FROM sys.all_objects WHERE TYPEP ORDER BY modify_date DESC; 视图 SELECT * FROM sys.all_objects WHERE TYPEv ORDER BY modify_date DESC; 表 SELECT * FROM sys.all_objects WHERE…

AI一分钟 | 比特大陆递交招股书,募资用于AI芯片研发;泰晤士2019全球大学排行榜:清华列亚洲第一...

▌比特大陆递交招股书&#xff0c;募资用于 AI 芯片研发9 月 26 日晚&#xff0c;比特大陆于香港联交所上载 A1 招股书&#xff0c;启动上市计划。中金为独家保荐人&#xff0c;搜狗创始人王小川担任其独立非执行董事。在招股书中&#xff0c;比特大陆称自身为中国第二大无晶圆…

php日志接入rsyslog,rsyslog和在PHP上的应用

rsyslog配置rsyslog的配置文件为/etc/rsyslog.conf&#xff0c;但真正的配置放在/etc/rsyslog.d/目录下# Default rules for rsyslog.## For more information see rsyslog.conf(5) and /etc/rsyslog.conf## First some standard log files. Log by facility.#auth,authpriv.* …

特斯拉“国王”王权不保

作者 | Just出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09;中国有句古话&#xff0c;“偷鸡不成蚀把米”。发推一时爽&#xff0c;本就麻烦缠身的马斯克不会想到&#xff0c;8 月 7 日那条考虑要将特斯拉私有化的推文&#xff0c;让他陷入了更大的…

流水账(4)---礼拜二---“抗议,我不是电工!”

礼拜二&#xff0c;今天。 6点半起床&#xff0c;9点钟到东郊。 上午帮东郊重装一台电脑。郁闷&#xff0c;我在那边一直就被当作修电脑的工人用了。还想起一个很有意思的误会。 一次&#xff0c;我和老师说&#xff0c;你知道罢&#xff0c;东郊还有一个fudan的法硕在那…

Python--1 初识

1.1 Python简介 Python[1] &#xff08;英国发音&#xff1a;/ˈpaɪθən/ 美国发音&#xff1a;/ˈpaɪθɑːn/&#xff09;, 是一种面向对象的解释型计算机程序设计语言&#xff0c;python的创始人为吉多范罗苏姆(Guido van Rossum)&#xff0c;Python是著名的“龟叔”Gui…

php 485串口通信,485串口通信中的常见问题

通信距离485总线的通讯距离理论可以达到1200米&#xff0c;一般是指通讯线材优质达标,波特率9600,只有一台485设备才能使得通讯距离达到1200米,而且能通讯并不代表每次通讯都正常.所以通常485总线实际的稳定的通讯距离远远达不到1200米. 负载485设备多,线材阻抗不合乎标准,线径…

人工智能加“医真云”,每年让5700万人告别误诊

“去拍个片子吧。”这是去医院看病常常能听到的话。现代医学诊断越来越倚重影像&#xff0c;专业医疗科学网站估计&#xff1a;医疗数据中有超过90%的数据来自于医学影像。然而&#xff0c;即便设备产生了高精度的大量影像&#xff0c;针对这些数据的分析&#xff0c;现在主要还…

关于Iframe之间以及与父窗体的值传递

自己实现过了的,javascript脚本关于Iframe之间以及与父窗体的值传递,事件调用问题; 在父页面访问Iframe子窗体的txtAddress控件window.frames["ifrMapCompanyDetails"].document.all("txtAddress").value 地址 ; 在Iframe子窗体1访问父页面的TextBox1控…

Php将网站推送到手机桌面的方法,把网页发送到桌面代码

把网页发送到桌面相信很多站长都会用到&#xff0c;可有的站长可能不会写&#xff0c;今天碎碎就给大家分享下把网页发送到桌面php和asp良种语言的代码。首先我们先做准备工作&#xff0c;要先上传自己网站的ioc文件&#xff0c;这样发送到桌面的时候才会有图标显示。然后新建一…

如何设计 Web App 应用架构?「两分钟了解 IOING」

IOING 在做些什么&#xff1f; IOING 在你的代码和浏览器之间架设了一个中间解释层&#xff0c;该解释层提供了一套新的语法来填补浏览器所不具备的能力。 SPA 开发痛点 开发一个 SPA 应用的痛点是不同模块页面的状态保存&#xff0c;当从一个页面跳转到另一个页面的时候窗口的…

ICLR 2019论文投稿近1600篇,强化学习最热门

作者 | 非主流出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09;ICLR 2019 的论文提交已经截止。根据官方消息&#xff0c;本届大会共收到近 1600 篇投稿&#xff0c;相比 ICLR 2018 的 935 篇&#xff0c;以及 ICLR 2017 的 490 篇&#xff0c;几乎每…

[Java]学习Java(4)类、接口、语句

1)类多了包的概念2)类继承时与C&#xff0b;&#xff0b;不同&#xff0c;它可以将父类protected的函数重写为public的。3)接口、纯虚函数概念都差不多&#xff0c;语法为&#xff1a;public class A extends B implements IC,ID,IE { ...}4)语句&#xff1a;与C&#xff0b;&a…

php easyui tree 结构,EasyUI Tree树组件无限循环的解决方法

在学习jquery easyui的tree组件的时候&#xff0c;在url为链接地址的时&#xff0c;发现如果最后一个节点的state为closed时&#xff0c;未节点显示为文件夹&#xff0c;单击会重新加载动态(Url:链接地址)形成无限循环。如&#xff1a;tree.json[{"id":1,"text&…

Scikit-learn 发布 0.20版本!新增处理缺失值、合并Pandas等亮点功能

整理 | Jane出品 | AI科技大本营之前一直预告 Scikit-learn 的新版本会在 9 月发布&#xff0c;在马上就要结束的 9 月&#xff0c;我们终于迎来了 Scikit-learn 0.20。此版本修复了大量的错误和功能&#xff0c;增强了 Scikit-learn 库&#xff0c;改善了文档和示例。在此对 …

深挖数据价值 阿里云栖开年大会报道

本文讲的是深挖数据价值 阿里云栖开年大会报道【IT168 云计算】经历风雨&#xff0c;转身看到彩虹。在这个“化云为雨”的时节&#xff0c;造云大咖们角色扮演也逐步渐入佳境&#xff0c;或随需而动&#xff0c;或引领潮流。阿里云作为国内公有云绝对的大咖之一&#xff0c;正以…

使用Facade模式分析

在遇到以下情况时可以考虑使用Facade模式&#xff1a;1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小类。这使得子系统更具可重用性&#xff0c;也更容易对子系统进行定制&#xff0c;但这也给那些不…

我与前端之间不得不说的三天两夜之javaScript

前端基础之JavaScriptJavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套…

难以置信!LSTM和GRU的解析从未如此清晰(动图+视频)

作者 | Michael Nguyen编译 | 蔡志兴、费棋编辑 | Jane出品 | AI科技大本营【导语】机器学习工程师 Michael Nguyen 在其博文中发布了关于 LSTM 和 GRU 的详细图解指南。博文中&#xff0c;他先介绍了 LSTM 和 GRU 的本质&#xff0c; 然后解释了让 LSTM 和 GRU 有良好表现的内…

php 开发restful api,用PHP创建RESTful API?

如果您的服务支持所有CRUD操作,则始终建议实现RESTful接口.这样做并不是很难.我已经概述了下面的一些基础知识.RESTful服务只是做了一些事情&#xff1a;>它使用HTTP请求方法进行CRUD操作的通信>它使用HTTP状态代码来传达响应状态,以及>它使用URI来定义您的资源(您正在…

MySQL服务器的配置教程

1、安装MySQL 这个应该很简单了&#xff0c;而且我觉得大家在安装方面也没什么太大问题&#xff0c;所以也就不多说了&#xff0c;下面我们来讲讲配置。 2、配置MySQL 注意&#xff0c;在Ubuntu下MySQL缺省是只允许本地访问的&#xff0c;如果你要其他机器也能够访问的话&am…

php开发我的世界插件,WorldEdit/开发与API

本页面已存在其他语言的内容&#xff0c;请协助翻译为本地化的中文。点击此处开始翻译。如本模板出现在原文存档页面&#xff0c;请注意更新主页面后&#xff0c;仍需要去除此处该模板如当前页面已经没有需要翻译的内容&#xff0c;请删去待翻译模板有标题的大篇幅文章&#xf…

关于AI,腾讯又有大动作!开发者该如何应对?

时隔 6 年后&#xff0c;腾讯公司的组织架构迎来新一轮的优化调整&#xff0c;在原有七大事业群&#xff08;BG&#xff09;的基础上进行重组整合。 腾讯公司董事会主席兼首席执行官马化腾表示&#xff1a;“作为一家以互联网为基础的科技和文化公司&#xff0c;技术是腾讯公司…

Android存储方式之SQLite

前言 SQLite数据库操作在Android开发中非常常用今天我将带大家全面了解关于SQLite数据库的操作&#xff08;增、删、查、改&#xff09;目录 1. SQLite数据库介绍 SQLite是Android内置的一个小型、关系型、属于文本型的数据库。 > Android提供了对 SQLite数据库的完全支持&a…