Java 9 是Java编程语言开发的主要版本,其初始版本于2017年9月21日发布。这个版本的主要目标是实现在小型计算设备上的良好运行,并对JDK和Java Standard Edition平台进行模块化,以提高整体安全性,以及使JAVA SE和EE平台的Java代码库和大型应用程序的构建过程和维护变得容易。
Java 9 发行版引入了模块系统,可以轻松应用于Platform和JDK,以及向Java平台添加了REPL(JShell)功能,这是一个可以读取、求值、打印和重复循环的交互式环境。此外,Java 9 也支持HTML5输出生成。
以上是Java 9的一些主要新增特性,这些特性使得Java语言在性能、易用性和可维护性方面都得到了进一步的提升。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println("Current date and time: " + now);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = now.format(formatter);
System.out.println("Formatted date and time: " + formattedDateTime);
}
}
// 在JShell中输入这些代码示例
| Welcome to JShell -- Version 9.0.1 |
| For an introduction see `jshell --helpdocs` |
| Type `exit` to quit JShell -- Press F5 to run selected statement -- Press ESC to interrupt current statement evaluation |
| / System.out.println("Hello, World!"); // 输出 Hello, World! |
| / int x = 5; // 定义一个整数变量x,并赋值为5 |
| / System.out.println("x = " + x); // 输出 x 的值 |
| / x += 3; // 将 x 的值增加3 |
| / System.out.println("x = " + x); // 输出 x 的值 |
| /exit; // 退出JShell交互式环境 |
module com.example.myapp {
requires java.base;
requires java.util;
exports com.example.myapp;
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientExample {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(java.net.URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> capitalizedNames = names.stream()
.map(name -> name.toUpperCase())
.collect(Collectors.toList());
System.out.println(capitalizedNames);
}
}
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class CollectExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
List<String> capitalizedNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(capitalizedNames);
}
}
// This is a comment
// This is another comment // end of comment
二进制分帧 :HTTP/2采用二进制格式传输数据,而非文本格式,并且数据帧可以被切分成多个帧发送,这些帧可以根据头部流标识重新组装。
单一长连接 :同一个域名使用一个TCP连接,这减少了创建多个TCP连接带来的网络开销和延迟,提高了吞吐量。
多路复用 :在HTTP/2中,同一个连接上的请求可以并行执行,类似于多车道,而不是单车道。请求被二进制分帧,每个帧都有流编号。同一个请求和响应的帧必须是有序的,不同的请求的帧可以互相穿插,然后按照流编号重组。
头部压缩 :HTTP/2使用HPACK压缩头部,使用首部表来进行首部字段存储。只有当首部表中的数据变更或为发送过时,才会发送http头部字段。客户端需要显式允许服务器启用推送功能。
向下兼容HTTP/1 :HTTP/2在“语义”层不做改动,与HTTP完全一致,例如请求方法、URI、状态码、头字段等概念保留不变。特别要说的是,与HTTPS不同,HTTP/2没有在URI里引入新的协议名,仍然用“http”表示明文协议,用“https”表示加密协议。
总的来说,HTTP/2协议的这些特性有助于提高网络性能和效率。