Java 中引入了流,以帮助开发人员从一系列对象执行聚合操作。在 Java 9 中,添加了一些方法来使流更好。 takeWhile(谓词接口) 语法 default Stream<T> takeWhile(Predicate<? super T> predicate) takeWhile 方法获取所有值,直到谓词返回 false。在有序流的情况下,它返回一个流,该流由从该流中提取的与给定谓词匹配的元素的最长前缀组成。 示例 import java.util.stream.Stream; public class Tester { public stati
在 Java 9 中,负责控制和管理操作系统进程的 Process API 得到了显着改进。 ProcessHandle 类现在提供进程的本机进程 ID、启动时间、累积 CPU 时间、参数、命令、用户、父进程和后代。 ProcessHandle 类还提供了检查进程活跃度和销毁进程的方法。它有onExit方法,CompletableFuture类可以在进程退出时异步执行动作。 Tester.java import java.time.ZoneId; import java.util.stream.Stream; import java.util.stream.Collectors; impor
在 java 8 之前,接口可以有以下类型的变量/方法。 常量变量 抽象方法 所以我们不能在接口中实现方法,或者更准确地说是 Java 8 之前的默认实现。参见示例。 现场演示 public class Tester { public static void main(String []args) { LogOracle log = new LogOracle(); log.logInfo(); log.logWarn(); log.logError(); log.logFatal(); LogMySql l
在 Java 9 中,新的工厂方法被添加到 List、Set 和 Map 接口以创建不可变实例。这些工厂方法是方便的工厂方法,可以以不那么冗长和简洁的方式创建集合。 创建集合的旧方法 现场演示 import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class Tester {
在 java 9 中,引入了一个新功能,其中增强了 jar 格式,可以根据平台维护和使用不同版本的 java 类或资源。在 JAR 中,文件 MANIFEST.MF 文件的主要部分有一个条目 Multi-Release:true。 META-INF 目录还包含一个版本子目录,其子目录(Java 9 以 9 开头)存储特定于版本的类和资源文件。 在此示例中,我们将使用一个多版本 jar 来拥有两个版本的 Tester.java 文件,一个用于 jdk 7,一个用于 jdk 9,并在不同的 jdk 版本上运行。 步骤 第 1 步 − 创建一个文件夹 c:/test/java7/com/tu
可以使用 javadoc 工具生成 Java 文档。它目前生成 html 4.0 格式的文档。在 java 9 中,我们可以通过在命令行参数中使用 -html5 选项来生成 html 5 格式的文档。 旧式 java 文档 考虑 C:/JAVA 文件夹中的以下代码。 Tester.java 现场演示 /** * @author MahKumar * @version 0.1 */ public class Tester { /** * Default method to be run to print * <p>Hello world&l
REPL 代表读取-评估-打印循环。使用 JShell,java 具有 REPL 功能。使用REPL,我们可以在不使用javac编译的情况下对基于java的逻辑进行编码和测试,并直接查看计算结果。 运行 JShell 打开命令提示符并输入 jshell。 $ jshell | Welcome to JShell -- Version 9-ea | For an introduction type: /help intro jshell> 查看 JShell 命令 一旦 jshell 命令开始运行,输入 /help。 jshell> /help | Type a Ja
Java 9 引入了一种称为模块的新型编程组件。模块是代码和数据的自描述集合,并有一个名称来标识它。 特点 借助 Modules 组件,Java 9 中添加了以下增强功能 - 引入了一个新的可选阶段,链接时间。此阶段介于编译时间和运行时间之间。在这个阶段,可以组装和优化一组模块,使用 jlink 工具制作自定义的运行时映像。 javac、jlink 和 java 有额外的选项来指定模块路径,从而进一步定位模块的定义。 JAR 格式更新为模块化 JAR,其根目录下包含 module-info.class 文件。 引入JMOD格式,一种封装格式(类似于JAR),可以包含原
本地环境设置 如果您想为 Java 编程语言设置自己的环境,那么本节将指导您完成整个过程。请按照以下步骤设置您的 Java 环境。 Java SE 可以免费下载。要下载请点击这里,请下载与您的操作系统兼容的版本。 按照说明下载 Java,然后运行 .exe 在您的机器上安装 Java。在您的机器上安装 Java 后,您需要设置环境变量以指向正确的安装目录。 为 Windows 2000/XP 设置路径 假设你已经在 c:\Program Files\java\jdk 目录下安装了 Java - 右键单击“我的电脑”并选择“属性”。 点击“高级”选项卡下的“环境变量”按钮
JAVA 9(又名 jdk 1.9)是 JAVA 编程语言开发的主要版本。它的初始版本于 2017 年 9 月 21 日发布。Java 9 发布的主要目标是 - 使JDK和Java标准版平台模块化,使其可以很好地缩小到小型计算设备。 提高 JDK 和 Java 实现的整体安全性。 让JAVA SE和EE平台的java代码库和大型应用的构建过程和维护变得容易。 为Java平台设计和实现一个标准的模块系统,可以轻松地在平台和JDK上应用。 新功能 Java 8 中添加了 90 多项增强功能,其中最重要的将在下面提到 - 模块 − 作为模块引入的一种新型Java
JEP 312 - 线程本地握手 在 JDK 10 中,为 JVM 引入了一个新选项,即 -XX:ThreadLocalHandshakes .此选项仅适用于基于 x64 和 SPARC 的机器。 此选项可用于提高 VM 性能。它允许在不创建全局 VM 安全点的情况下对应用程序线程进行回调。从而允许JVM停止单个线程而不停止所有线程。 由于此选项不适用于所有平台,其他平台将退回到正常的安全点。
JEP 319 - 根证书 Cacerts 存储,在 Java 10 之前是一个空集。需要包含一组证书,用于在厂商的各种安全协议的证书链中建立信任。 OpenJDK 构建没有这样的证书,这就是为什么 TLS 等关键安全组件在默认构建中不起作用的原因。 现在由于 Oracle 已经使用 Oracle JAVA SE Root CA 程序开源了根证书,OpenJDK 构建现在可以拥有根证书,从而可以减少 OpenJDK 和 Oracle JDK 之间的差异。 Oracle JAVA SE Root CA 程序颁发根证书。已签署协议的供应商包含在根证书集中。未注册的供应商将包含在下一个版本中
JEP 296 - 将 JDK 森林整合为单一存储库 在 JDK 9 中,有八个基于模块的目录,称为 repos。 根 考巴 热点 jaxp jaxws jdk 语言工具 纳肖恩 代码的组织方式类似于 - $ROOT/jdk/src/java.base...$ROOT/langtools/src/java.compiler... 从 Java 10 开始,JDK 森林被组织到单个存储库中以简化开发。现在代码组织为 - $ROOT/src/java.base$ROOT/src/java.compiler...
JEP 316 - 替代存储设备上的堆分配 借助 Java 10 中的这一增强功能,现在用户可以指定备用内存设备,例如将 NV-DIMM 分配给 HotSpot VM 来分配 Java 堆空间。用户需要使用新选项 -XX:AllocateHeapAt 将路径传递到文件系统。 -XX:AllocateHeapAt=~/etc/heap 此选项采用文件路径并进行内存映射以达到所需的结果。 -Xmx、-Xms 等其他堆标志继续有效。
JEP 314 - Unicode 语言标签扩展 Java 7 引入了对 BCP 47 语言标签的支持。但是这种 unicode 语言环境扩展仅限于日历和数字。在 Java 10 中,java.util.Locale 和相关类已更新以实现 LDML 规范中指定的其他 unicode 扩展。添加了以下附加扩展。 立方 − 货币种类 fw − 一周的第一天 rg − 区域覆盖 茨 − 时区 以下 API 已更新。 java.text.DateFormat::get*Instancejava.text.DateFormatSymbols::getInstancejav
JEP 304 - 垃圾收集器接口 在 Java 10 之前,GC(垃圾收集器)实现组件分散在代码库中,不易替换。在 Java 10 中,引入了 Garbage-Collector 接口,以便可以插入替代的 GC 实现。它还有助于将代码库与不同的垃圾收集实现隔离开来。此功能是 JEP 304 的一部分。 JEP 307 - G1 的并行完全 GC Java 9 引入了 G1(垃圾优先)垃圾收集器。 G1 避免了完全的垃圾收集,但如果并发线程寻找收集并且内存恢复速度不够快,用户体验就会受到影响。在 Java 10 中,现在 G1 将使用回退的 Full Garbage Collection。
JEP 310 - 应用程序类-数据共享 当 JVM 启动时,它会将类加载到内存中作为初步步骤。如果有多个 jar 具有多个类,则第一个请求会出现明显的滞后。在无服务器架构中,这样的延迟会延迟启动时间,这是这种架构中的关键操作。应用程序类数据共享概念有助于减少应用程序的启动时间。 Java 具有现有的 CDS(类数据共享)功能。通过应用程序类数据共享,Java 10 允许将应用程序类放在共享存档中。这通过在多个 java 进程之间共享公共类元数据来减少应用程序启动和占用空间。 流程 应用程序类数据共享是一个 3 步过程。 创建要归档的类列表 − 使用Java Launcher 创建一
JEP 317 - 基于 Java 的实验性 JIT 编译器 JIT 编译器是用 C++ 编写的,用于将 Java 转换为字节码。现在 Java 10 可以选择启用基于 Java 的实验性 JIT 编译器,使用 Graal 代替标准 JIT 编译器。 Graal 正在使用 Java 9 中引入的 JVMCI,即 JVM 编译器接口。Graal 在 Java 9 中也可用。借助 Java 10,我们可以启用 Graal 来测试和调试实验性 JVM 编译器。 语法 java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler Graal
JDK 10 版本已弃用 Java 库中的几个 API、特性和选项。以下是相关细节。 SNMP 监控支持已弃用 − 支持 JVM 的 SNMP 监控和管理支持的 jdk.snmp 模块现已弃用,并标记为 forRemoval=true。 java.security 类已弃用 - java.security.{Certificate, Identity, IdentityScope, Signer} 类现已弃用,并标记为 forRemoval=true。 用于删除的 javax.security.auth.Policy API − 弃用的 javax.security.aut
JDK 10 版本已从 Java 库中删除了几个已弃用的 API、功能和选项。以下是相关细节。 不支持的 LookAndFeels 已移除 − 使用 Nimbus 或 Aqua LookAndFeels 的应用程序必须迁移到新语法。 Nimbus - 现有代码 javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel); Nimbus - 新代码 UIManager.setLookAndFeel(javax.swing.plaf.nimbus.NimbusLookAndF
java