Java 是世界上使用最广泛、需求量最大的编程语言之一,自 1995 年推出以来一直在不断发展。由于周期性的发布周期,如今要跟上 Java 的最新版本需要做更多的工作。
每六个月,Java 就会发布其软件的新版本。得益于 Oracle, Java JDK 11于 2018 年 9 月 25 日可用。Java 新的六个月发布周期中的第一个长期支持 (LTS) 升级是 Java SE 11。许多计算机专家热切期待新版本并使用 Java 11 的最新功能。Java 11 是继 Java 8 之后的第二个 LTS 版本,充分说明了它的实用性。
随着Java 11的发布,Oracle JDK 不再免费用于商业用途。您还应该知道,Java 编程认证的有效性不受最新版本的影响。
为什么 Java 11 很重要?
在介绍新功能之前, 让我们先了解一下Java 11的重要性。
运行小程序和 Web 应用程序需要部署堆栈。
由于部署堆栈不可用,因此从允许的配置列表中删除了一整类受支持的浏览器。
Java 11 为 Java Mission Control 和 JavaFX 提供单独的下载。
对于 macOS 和 Windows 上的 JRE 安装,没有自动更新功能。
JRE 或 Server JRE 不包含在 Java 11 中,用户只收到 JDK。
Java 11 无法访问某些语言的 Java 语言翻译。法语、意大利语、德语、瑞典语、西班牙语、巴西语、葡萄牙语和韩语是不支持的语言。
Java 11 功能还包括对 Windows 和 macOS 打包格式的更新。
Java 11 为 Windows 修改后的包格式是 .zip,而不是 tar.gz。macOS 的修改后的打包类型不是 .app,而是 .dmg。
现在让我们仔细看看新的 Java 特性。
Java 11 有哪些特点?
以下是带有示例的 Java 11 功能列表:
新的字符串方法
Java 11 中的 String 类添加了几个有用的方法:
StripLeading()、StripTailing() 和 String.strip():
String 的前导和尾随空格通过 String.strip() 函数消除。trim() 函数消除代码点为 U 0020 或更小的任何字符。例如,“空格”、“制表符”、“换行符”和“回车符”都包含在其中。
strip() 删除被 Character.isWhitespace() 分类为空白的字符。一方面,这些字符中的一些(但不是全部)具有 U 0020 或更小的代码点。
Unicode 标准中指定为空格、换行符和段落分隔符的字母(例如 U 2002,一个与字母“n”一样宽的空格)则相反。该技术有两种变体: stripLeading() 仅删除前导空格, 而 stripTailing() 只删除尾随的。
字符串.isBlank():
只有前一句中指示的 Character.isWhitespace() 方法定义为空格的字符才允许出现在 String 中,新的 String.isBlank() 函数才能返回 true。
字符串.repeat(): String.repeat() 可用于重复连接字符串: System.out.println(“:-)”.repeated(20));
新文件方法:
新 Java 版本的主要吸引力之一是将新的文件方法添加到 Java 11 功能列表中。共有三种新的文件方法:“writeString()”、“readString”和“isSameFile”。
“readString()”最适合读取文件内容,而“writeString()”最适合将内容写入文件。在确定两个路径是否引用同一个文件时,“isSameFile()”方法很有用。
集合到数组:
新的默认 toArray() 方法使得将集合更改为正确类型的数组变得简单。
公共类 JavaDemo
非谓词方法:
Java 11 中引入的 Predicate.not() 静态方法用于拒绝现有谓词。java.util.function 包包含 Predicate 类。
negate = Predicate.not(positivesPredicate);
Lambda 的局部变量语法:
Var 可以在 JDK 11 中的 lambda 表达式中使用。这是为了与 Java 10 的本地“var”语法兼容而添加的。
为了避免在 Java 11 中将类型名称与变量名称组合在一起,我们可以将 var 关键字与 lambda 表达式参数一起使用。在 Java 中使用 lambda 表达式时,以前禁止使用 var 关键字,但现在允许使用。
接口计算{
整数总和(整数 x,整数 y);
客户端:
新的 HTTP Client API 是 java.net.http 包的一部分,首先在 Java 9 中可用,后来在 Java 10 中得到增强,然后成为 Java 11 中的标准功能。可以使用 Java 11 HttpClient 发送简单的 GET 请求
基于嵌套的访问控制:
Nest 是一个访问控制框架,它符合 Java 编程语言当前的嵌套类型概念。嵌套的使用允许类被编译成不同的类文件,但具有相同代码结构的组件可以与彼此的私有成员进行通信,而无需编译器提供可访问性扩大的桥接方法。
运行 Java 文件:
我们必须先使用 javac 命令编译一个 Java 文件,然后才能运行它。但是在 Java 11 中,我们可以使用单个 java 命令立即启动 Java 文件。
java MyFirstJavaBasedProgram.java 用于性能增强的 JAVA 11 功能
以下是用于性能增强的 Java 11 功能:
动态类文件常量:
在 Java 11 中,Class-File 格式支持一种全新的常量池形式,称为 CONSTANT Dynamic。在这种情况下,将创建一个引导程序方法。通过建立一个新的常量池形式来减少创建新形式的可具体化类文件常量的费用,该常量池形式将使用适当的用户定义的行为进行参数化。有了这个特性,性能有了显着提高。
改进的 Aarch64 内在函数:
被编译器唯一处理的函数称为内在函数。通过使用针对 CPU 架构定制的汇编级语言代码提高性能。AArch64 (或 ARM64)处理器上的字符串和数组内在函数在 Java 11 中得到增强和优化。对于 java.lang.Math sin、cos 和 log 方法, Java 11 还包含了新的内在函数。
无操作垃圾收集器:
在 JDK 11 中,我们收到了一个名为 Epsilon GC 的新垃圾收集器。虽然它并不作用于实际内存回收的过程,但是这个GC管理着内存分配。因此,当整个 Java 堆内存不足并抛出 OutOfMemoryError 时,JVM 将关闭。
开发此 GC 的目标是提供有限的内存分配限制,并尽可能减少延迟开销。本质上,它表示了解堆对于我们的程序来说就足够了。因此我们不需要从 JVM 借用资源来执行 GC 杂务(短暂停顿)。GC 对执行的影响被消除,代码在完全隔离的情况下执行。
Epsilon GC 主要可用于性能测试,包括确定垃圾收集如何影响应用程序的速度和应用程序的内存阈值。如果您预计您的程序将需要 4GB 内存,您可以使用“-Xmx4g”参数运行它,如果 JVM 崩溃,您可以启用“-XX:HeapDumpOnOutOfMemoryError”选项重新运行它。然后检查堆转储以查看哪个进程或哪里使用了额外内存。
飞行记录器:
Java Flight Recorder,有时称为 JFR,收集应用程序的分析信息。它以前只能用于商业目的,但 OpenJDK 11 已将其开源。由于它的开销很低(大约 1%),我们可以将它用于生产应用程序。这些信息存储在一个 JFR 文件中,我们可以使用 JDK Launch Control 工具对其进行检查。使用以下命令启动 180 秒的 JFR 记录,数据将保存在 Javademo.jfr 文件中。
其他变化:
以下是 Java 11 中的一些其他更改:
包括对 Unicode 11 的帮助:
Java 11 为现有平台 API 添加了 Unicode 11 兼容性。下面列出了以下 Java 类,其中大部分都与 Unicode 10 兼容:
NumericShaper 是 java.awt.font 包中的一种字体。
String 和 Character 包含在 java.lang 包中。
Bidi、Normalizer 和 BreakIterator 包含在 java.text 包中。
此更新向 Unicode 9 标准添加了 16,018 个字符和十个新脚本。
启动单文件源代码应用程序:
JDK Enhancement Proposal 330 对于只有一个类的小型 Java 程序变得很有趣。
这允许您使用 java 命令来编译和运行 .java 文件。此外,所谓的“shebang”可以使 .java 文件可执行。结论 ,检查各种新的 Java 11 功能突出了下一个 Java 版本中额外改进的方向。此外,与其他新版本类似,Java 11 在某个位置包含了其他最新进展。Java 11 是 Java 的一致长期支持 (LTS) 版本这一事实是其最显着的特征。Java 8 之后的第二个 Java 长期支持版本。您可能不会注意到 Java 的转换系统有任何变化。这表明 Java 12 也将得到长期支持。 我们在研究 Java 11 的新特性时发现它缺少很多旧功能。例如,Java 11 不支持 SNMP 代理或 Java 部署技术。由于 Java 11,Java 生态系统无疑发生了一些重大变化。您可以通过Web 免费提供的Java 11 教程了解有关该语言的更多信息。我们建议您查看UNext以获取找到工作所需的尖端技能。