149 次浏览
JShell 是 Java 9 中引入的命令行提示工具,也称为 REPL 工具,用于评估简单的语句、执行语句并立即打印输出。Map 接口指定了一个实现元素集合的契约,这些元素以键/值对的形式出现。实现 Map 接口的 Java 集合类有 HashMap、LinkedHashMap 和 TreeMap。在下面的代码片段中,HashMap 的元素不能保证以插入顺序或键的排序顺序存储。代码片段 1 jshell> HashMap hashMap = new HashMap(); hashMap ==> {} jshell> hashMap.put("Adithya", 101); $2 ==> null jshell> hashMap.put("Jai", 102); $3 ==> null ... 阅读更多
6K+ 次浏览
CompletableFuture 类在 Java 中实现了 Future 接口。CompletableFuture 可用作已显式完成的 Future。Future 接口没有提供很多功能,我们需要使用阻塞的 get() 方法获取异步计算的结果,因此没有范围以非阻塞方式运行多个依赖任务,而 CompleteFuture 类可以提供链接多个异步运行的依赖任务的功能,因此我们可以创建一个任务链,其中下一个任务在当前任务的结果可用时触发。语法 public class CompletableFuture extends Object implements Future, CompletionStage 例子 import java.util.function.Supplier; import java.util.concurrent.CompletableFuture; ... 阅读更多
167 次浏览
Java 9 通过包含新方法并引入新的接口 ProcessHandle 和 ProcessHandle.Info 来改进 Process API,以获取有关进程及其信息的所有详细信息。ProcessHandle 接口可以识别和控制本机进程。可以监控每个单独进程的活动状态,列出其子进程,获取有关进程的信息或销毁它。ProcessHandle.Info 接口提供有关进程的信息快照。语法 ProcessHandle.Info info() 例子 public class ProcessSnapShotTest { public static void main(String[] args) { ProcessHandle currentProcessHandleImpl = ProcessHandle.current(); // 使用 ProcessHandle.Info 获取当前正在运行的进程的进程快照: ProcessHandle.Info processInfo = ... 阅读更多
314 次浏览
destroyForcibly() 方法可用于终止进程。如果进程已完成或已冻结,则需要此方法。例如,在调用 destroyForcibly() 后,isAlive() 方法返回 true。如果成功请求终止,则 destroyForcibly() 方法返回 true,否则返回 false。语法 boolean destroyForcibly() 在下面的示例中,我们将能够启动记事本应用程序,并在调用 destroyForcibly() 方法后将其终止。例子 import java.io.IOException; import java.lang.ProcessBuilder; public class DestroyForciblyTest { public static void main(String args[]) throws IOException, InterruptedException { ProcessBuilder pBuilder = new ProcessBuilder(); pBuilder.command("notepad.exe"); ... 阅读更多
126 次浏览
JShell 是 Java 9 中的一个命令行工具,它已用于执行简单的语句,如表达式、类、接口、方法等。Set 是 Java 中的一个接口,它指定了具有唯一元素的集合的契约。如果 object1.equals(object2) 返回 true,则只有 object1 和 object2 之一在 Set 实现中占有一席之地。在下面的代码片段中,我们必须使用 Set.of() 方法。Set.of() 方法返回的集合是不可变的,因此不支持 add() 方法。如果我们尝试添加一个元素,则会抛出 UnsupportedOperationException。如果我们想要创建一个支持…的 HashSet 集合,则… 阅读更多
483 次浏览
Jdeps 工具可用于分析我们类的依赖关系。“jdeps -jdkinternals jararchive.jar”命令的运行会打印使用 Java 内部 API 的所有类的列表。Jdeps 工具返回依赖项的详细描述,而 Jdeprscan 是另一个有用的工具,尤其是在与“-for-removal”标志结合使用时。此工具向我们展示了给定 jar 存档的所有已弃用 API 的用法,并且只能显示 JDK 方法的已弃用用法,而不能使用此工具来检查第三方 jar 中的弃用情况。Jdeps 工具:“jdeps”是一个类依赖关系分析器工具,可用于包级别… 阅读更多
111 次浏览
"jcmd" 是 JVM 诊断工具,它是一个命令行工具,用于对本地机器上的给定 JVM 运行诊断命令。此工具自 Java 7 版本起就包含在 JDK 安装中,它可以由 "%java_home%\bin\jcmd.exe" 程序文件表示。如果我们的 "%java_home%\bin" 目录包含在 "path" 环境变量中,我们可以运行 "jcmd -h" 命令以查看所有选项的完整列表,如下所示 C:\Users\User>jcmd -h 用法:jcmd 或:jcmd -l 或:jcmd -h 命令必须是为所选 jvm 提供的有效 jcmd 命令。 使用命令“help”来… 阅读更多
780 次浏览
所有 Java 程序都在 Java 虚拟机 (JVM) 上运行。编译后,Java 类会转换为平台和机器无关的字节码,编译后的类会存储为 .class 文件。每当我们尝试使用它时,ClassLoader 都会将该类加载到内存中。当类以名称引用时,类会引入到 Java 环境中。类的加载是由类加载器完成的,一旦类开始运行,main() 方法就是启动该类的一种方式。Java 9 中类加载器有一些细微的变化:Java 9 中不再有系统类加载器,… 阅读更多
401 次浏览
在 Java 9 之前,扩展类加载器和应用程序类加载器是 java.net.URLClassLoader 类的实例。在 Java 9 中,类加载器的分类发生了变化,我们有了 Platform 类加载器,而不是外部类加载器。使用 Platform 类加载器的目的是,由引导类加载器加载的类默认具有所有权限。在下面的示例中,我们可以显示所有带有类加载器的模块。例子 import static java.util.Objects.isNull; public class Java9ClassLoaderTest { public static void main(String args[]) { ModuleLayer layer = ModuleLayer.boot(); layer.modules().forEach(module -> { ... 阅读更多
2K+ 次浏览
模块是代码和数据的组合,它具有名称,声明对其他模块的依赖关系,导出包含可从模块外部访问的公共类型的包,并指定它使用的服务或它提供的服务实现。所有这些都指定在 module-info.java 文件中,该文件包含在模块的根目录中。module-info.java 文件中可以使用两种类型的“export”子句。1) export:默认情况下,模块的公共类型不再在模块外部可见。为了使给定包的公共类型从… 阅读更多