Skip to content

Commit 279928a

Browse files
committed
[docs add]Java 18新特性
1 parent 923c5a3 commit 279928a

File tree

6 files changed

+94
-2
lines changed

6 files changed

+94
-2
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
124124
- [Java 12~13 新特性概览](./docs/java/new-features/java12-13.md)
125125
- [Java 14~15 新特性概览](./docs/java/new-features/java14-15.md)
126126
- [Java 16 新特性概览](./docs/java/new-features/java16.md)
127+
- [Java 18 新特性概览](./docs/java/new-features/java18.md)
127128
- [Java 19 新特性概览](./docs/java/new-features/java19.md)
128129

129130
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)

docs/.vuepress/sidebar.ts

+1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export const sidebarConfig = defineSidebarConfig({
147147
"java12-13",
148148
"java14-15",
149149
"java16",
150+
"java18",
150151
"java19",
151152
],
152153
},

docs/home.md

+1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
128128
- [Java 12~13 新特性概览](./java/new-features/java12-13.md)
129129
- [Java 14~15 新特性概览](./java/new-features/java14-15.md)
130130
- [Java 16 新特性概览](./java/new-features/java16.md)
131+
- [Java 18 新特性概览](./java/new-features/java18.md)
131132
- [Java 19 新特性概览](./java/new-features/java19.md)
132133

133134
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)

docs/java/new-features/java18.md

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: Java 19 新特性概览
3+
category: Java
4+
tag:
5+
- Java新特性
6+
---
7+
8+
Java 18 在 2022 年 3 月 22 日正式发布,非长期支持版本。不过,Java 18 中有一些比较重要的新特性值得关注。
9+
10+
Java 18 带来了 9 个新特性:
11+
12+
- [JEP 400:UTF-8 by Default(默认字符集为 UTF-8)](https://openjdk.java.net/jeps/400)
13+
- [JEP 408:Simple Web Server(简易的 Web 服务器)](https://openjdk.java.net/jeps/408)
14+
- [JEP 413:Code Snippets in Java API Documentation(Java API 文档中的代码片段)](https://openjdk.java.net/jeps/413)
15+
- [JEP 416:Reimplement Core Reflection with Method Handles(使用方法句柄重新实现反射核心)](https://openjdk.java.net/jeps/416)
16+
- [JEP 417:Vector(向量) API ](https://openjdk.java.net/jeps/417)(第三次孵化)
17+
- [JEP 418:Internet-Address Resolution(互联网地址解析)SPI](https://openjdk.java.net/jeps/418)
18+
- [JEP 419:Foreign Function & Memory API(外部函数和内存 API)](https://openjdk.java.net/jeps/419)(第二次孵化)
19+
- [JEP 420:Pattern Matching for switch(switch 模式匹配)](https://openjdk.java.net/jeps/420)(第二次预览)
20+
- [JEP 421:Deprecate Finalization for Removal](https://openjdk.java.net/jeps/421)
21+
22+
Java 17 中包含 14 个特性,Java 16 中包含 17 个特性,Java 15 中包含 14 个特性,Java 14 中包含 16 个特性。相比于前面发布的版本来说,Java 18 的新特性少了很多。
23+
24+
这里只对 400、408、413、416、418 这 5 个我觉得比较重要的新特性进行详细介绍。在 [Java 19 新特性概览](./java19.md)这篇文章中,我详细介绍了 Vector(向量) API 和 Foreign Function & Memory API(外部函数和内存 API),感兴趣的可以看看,这里就不重复讲了。
25+
26+
相关阅读:
27+
28+
- [OpenJDK Java 18 文档](https://openjdk.java.net/projects/jdk/18/)
29+
- [IntelliJ IDEA | Java 18 功能支持](https://mp.weixin.qq.com/s/PocFKR9z9u7-YCZHsrA5kQ)
30+
31+
## JEP 400:默认字符集为 UTF-8
32+
33+
JDK 终于将 UTF-8 设置为默认字符集。
34+
35+
在 Java 17 及更早版本中,默认字符集是在 Java 虚拟机运行时才确定的,取决于不同的操作系统、区域设置等因素,因此存在潜在的风险。就比如说你在 Mac 上运行正常的一段打印文字到控制台的 Java 程序到了 Windows 上就会出现乱码,如果你不手动更改字符集的话。
36+
37+
## JEP 408:简易的 Web 服务器
38+
39+
Java 18 之后,你可以使用 `jwebserver` 命令启动一个简易的静态 Web 服务器。
40+
41+
```bash
42+
$ jwebserver
43+
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
44+
Serving /cwd and subdirectories on 127.0.0.1 port 8000
45+
URL: http://127.0.0.1:8000/
46+
```
47+
48+
这个服务器不支持 CGI 和 Servlet,只限于静态文件。
49+
50+
## JEP 413:优化 Java API 文档中的代码片段
51+
52+
在 Java 18 之前,如果我们想要在 Javadoc 中引入代码片段可以使用 `<pre>{@code ...}</pre>`
53+
54+
```java
55+
<pre>{@code
56+
lines of source code
57+
}</pre>
58+
```
59+
60+
`<pre>{@code ...}</pre>` 这种方式生成的效果比较一般。
61+
62+
在 Java 18 之后,可以通过 `@snippet` 标签来做这件事情。
63+
64+
```java
65+
/**
66+
* The following code shows how to use {@code Optional.isPresent}:
67+
* {@snippet :
68+
* if (v.isPresent()) {
69+
* System.out.println("v: " + v.get());
70+
* }
71+
* }
72+
*/
73+
```
74+
75+
`@snippet` 这种方式生成的效果更好且使用起来更方便一些。
76+
77+
## JEP 416:使用方法句柄重新实现反射核心
78+
79+
Java 18 改进了 `java.lang.reflect.Method``Constructor` 的实现逻辑,使之性能更好,速度更快。这项改动不会改动相关 API ,这意味着开发中不需要改动反射相关代码,就可以体验到性能更好反射。
80+
81+
OpenJDK 官方给出了新老实现的反射性能基准测试结果。
82+
83+
![新老实现的反射性能基准测试结果](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/new-features/JEP416Benchmark.png)
84+
85+
## JEP 418:互联网地址解析 SPI
86+
87+
Java 18 定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析,以便 `java.net.InetAddress` 可以使用平台之外的第三方解析器。

docs/java/new-features/java19.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ JDK 19 只有 7 个新特性:
1717
- [JEP 427: Pattern Matching for switch(switch 模式匹配)](https://openjdk.java.net/jeps/427)
1818
- [JEP 428: Structured Concurrency(结构化并发)](https://openjdk.org/jeps/428)(孵化)
1919

20-
这里只对 424、425、426、428 这 4 个我觉得比较重要的新特性进行介绍。
20+
这里只对 424、425、426、428 这 4 个我觉得比较重要的新特性进行详细介绍。
21+
22+
相关阅读:[OpenJDK Java 19 文档](https://openjdk.org/projects/jdk/19/)
2123

2224
## JEP 424: 外部函数和内存 API(预览)
2325

docs/open-source-project/system-design.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ icon: "xitongsheji"
154154

155155
- **[ShardingSphere](https://github.com/apache/shardingsphere)** :ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。中文文档:[https://shardingsphere.apache.org/document/current/cn/overview/](https://shardingsphere.apache.org/document/current/cn/overview/)
156156
- **[MyCat](https://github.com/MyCatApache/MyCat2)** : MyCat 是数据库分库分表的中间件,MyCat 使用最多的两个功能是:读写分离和分库分表。MyCat 是一些社区爱好者在阿里 Cobar 的基础上进行二次开发,解决了 Cobar 当时存 在的一些问题,并且加入了许多新的功能在其中。
157-
- **[dynamic-datasource-spring-boot-starter](https://github.com/baomidou/dynamic-datasource-spring-boot-starter])** :dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。如果说你有配置多数据源、读写分离等需求的话,可以了解一下这个项目。
157+
- **[dynamic-datasource-spring-boot-starter](https://github.com/baomidou/dynamic-datasource-spring-boot-starter)** :dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。如果说你有配置多数据源、读写分离等需求的话,可以了解一下这个项目。
158158

159159
相关阅读:[数据库中间件详解(精品长文)](https://zhuanlan.zhihu.com/p/87144535)
160160

0 commit comments

Comments
 (0)