257 次浏览
Java 9 提供了一种高效的栈遍历方式,用于延迟访问,使用 StackWalker API 过滤堆栈跟踪。StackWalker 的对象可以让我们遍历和访问堆栈。此类包含一些有用的方法,如 walk()、forEach() 和 getCallerClass()。getCallerClass() 方法返回调用此方法的方法的调用方类。要获取调用方类的实例,在获取 StackWalker 实例时需要 RETAIN_CLASS_REFERENCE。RETAIN_CLASS_REFERENCE 保留 StackWalker 遍历的所有类的实例。语法public Class getCallerClass()示例import java.lang.StackWalker.Option; public class StackWalkerTest { public static void main(String args[]) { StackWalkerTest1.test1(); ... 阅读更多
176 次浏览
紧凑字符串已在 Java 9 中引入,以取代 Java 6 的压缩字符串。其实现使用 byte[] 数组而不是 char[] 数组,并引入了一个新的字段 coder 来识别它是 LATIN1 还是 UTF16 格式,而压缩字符串已在 Java 6 中引入,它可以用于每个字符一个字节的 byte[] 数组,并继续使用每个字符两个字节的 char[] 数组,以前可以使用 -XX: + UseCompressedStrings 打开。与压缩字符串不同,紧凑字符串不需要解压缩或重新打包。因此,紧凑字符串在运行时提供了更好的性能。压缩字符串在 Java 6 中默认情况下未启用,需要... 阅读更多
545 次浏览
REPL 代表读取-评估-打印-循环。它是一个 shell,用户在其中键入表达式,对其进行评估,并将结果返回给用户。使用 REPL 的主要目的是快速与 Java 程序交互,而无需创建 Java 文件、编译它并运行它。JShell 对开发人员非常有用,并允许我们学习 Java 语言。以下是 REPL 的一些功能它内置在 Java 9 中。我们可以测试任何 Java 表达式,而无需类文件、编译和运行它。它会自动完成方法,只需键入 TAB 键,就像在您的编辑器中一样。我们可以定义方法,并... 阅读更多
106 次浏览
Optional 类提供了一个可能包含或可能不包含非空值的容器。它是在 Java 8 中引入的,以减少代码中生成 NullPointerException 的位置。Java 9 添加了三个方法:ifPresentOrElse()、or() 和 stream(),它们可以帮助我们处理默认值。在下面的示例中,我们可以使用 Person 类从 Optional 类获取流示例import java.util.Optional; import java.util.stream.Stream; public class OptionalTest { public static void main(String args[]) { getPerson().stream() .map(Person::getName) ... 阅读更多
445 次浏览
Java 9 引入了用于 Java 编程语言的 JShell 工具。此工具允许我们评估代码片段,例如声明、语句和表达式。我们将获取有关 Java 版本和供应商的详细信息,并通过使用 System 类的静态方法 getProperty() 获取有关操作系统版本和名称的详细信息。在下面的代码片段中,我们可以在 JShell 控制台中获取 Java 版本、Java 供应商和操作系统版本以及操作系统名称的详细信息。C:\Users\User>jshell | 欢迎使用 JShell -- 版本 9.0.4 | 要获取介绍,请键入:/help intro jshell> System.out.println(System.getProperty("java.version")); 9.0.4 jshell> System.out.println(System.getProperty("java.vendor")); Oracle ... 阅读更多
2K+ 次浏览
Flow API 是自 Java 9 以来对反应式流规范的官方支持。它是迭代器和观察者模式的组合。Flow API 是一个互操作规范,而不是像 RxJava 这样的最终用户 API。Flow API 包含四个基本接口:Subscriber:Subscriber 订阅 Publisher 以获取回调。Publisher:Publisher 将数据项流发布到已注册的订阅者。Subscription:发布者和订阅者之间的链接。Processor:Processor 位于 Publisher 和 Subscriber 之间,并将一个流转换为另一个流。在下面的示例中,我们创建了一个基本的订阅者,它请求一个数据对象,打印它并请求另一个数据对象。... 阅读更多
179 次浏览
JShell 是 Java 9 中引入的交互式 Java shell 工具,它允许我们执行代码片段,并立即显示结果,而无需像 Java 那样声明 main() 方法。它是一个 REPL(读取-评估-打印-循环)工具,并从命令行提示符运行。我们可以使用 JShell 创建变量、方法、类、临时变量、外部库等在下面的代码片段中,我们可以通过扩展 Thread 类来创建一个线程。C:\Users\User>jshell | 欢迎使用 JShell -- 版本 9.0.4 | 要获取介绍,请键入:/help intro jshell> class ThreadTest extends Thread { ...> public void run() { ...> ... 阅读更多
136 次浏览
JLink 功能的主要目的是创建我们自己的自定义 JRE。通常,我们使用 Oracle Corporation 提供的默认 JRE 运行程序,其大小为 214 MB。例如,用户希望打印一条简单的“Hello World”消息,如下所示public class HelloWorldModuleTest { public static void main(String args[[]) { System.out.println("Hello World!"); } }要运行上述大小为 1 KB 的程序,我们需要 4-5 个类,如 String、System、Object 和 HelloWorldModuleTest.class 文件。那么,为什么我们需要使用... 阅读更多
657 次浏览
模块是代码的集合,以类(组织在包中)和静态资源(如属性文件或其他资源)的形式组织。它为外部环境提供使用该模块所需的所有信息。模块描述符是模块系统的重要来源,它是模块声明的编译版本,在模块目录层次结构的根目录中名为“module-info.java”的文件中指定。模块通过以下模块声明描述自身module com.myproject.module1 { requires com.myproject.module2; exports com.myproject.project1; exports com.myproject.project2; }以下是描述的一些模块描述符:module module. name:声明一个模块... 阅读更多
130 次浏览
Http/2 是 Http 协议的较新版本。Http/2 的改进包括专注于如何在服务器和客户端之间对数据进行帧化和传输。在这个新的 Http/2 协议版本中,为 Http 客户端、请求和响应定义了单独的类。新的 API 使 Http 连接更容易维护、更快速,并允许更具响应性的应用程序,而无需第三方库。新的 API 通过三个类处理 HTTP 连接。HttpClient:它处理请求的创建和发送。HttpRequest:它用于构造要通过 HttpClient 发送的请求。HttpResponse:它保存... 阅读更多