--- title: Java 18 æ°ç¹æ§æ¦è§ description: æ¦è§ JDK 18 çæ´æ°ä¸é¢è§ç¹æ§ï¼çè§£æ° API 带æ¥çæ¹è¿ã category: Java tag: - Javaæ°ç¹æ§ head: - - meta - name: keywords content: Java 18,JDK18,é¢è§ç¹æ§,API æ´æ°,JEP --- Java 18 å¨ 2022 å¹´ 3 æ 22 æ¥æ£å¼åå¸ï¼éé¿ææ¯æçæ¬ã JDK 18 å ±æ 8 个æ°ç¹æ§ï¼è¿ç¯æç« 伿éå ¶ä¸è¾ä¸ºéè¦çä¸äºæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ï¼ - [JEP 400: UTF-8 by Defaultï¼UTF-8 ä½ä¸ºé»è®¤å符éï¼](https://openjdk.java.net/jeps/400) - [JEP 408: Simple Web Serverï¼ç®å Web æå¡å¨ï¼](https://openjdk.java.net/jeps/408) - [JEP 413: Code Snippets in Java API Documentationï¼API ææ¡£ä»£ç çæ®µï¼](https://openjdk.java.net/jeps/413) - [JEP 416: Reimplement Core Reflection with Method Handlesï¼æ¹æ³å¥æéææ ¸å¿åå°ï¼](https://openjdk.java.net/jeps/416) - [JEP 417: Vector API (Third Incubator)ï¼åé APIï¼ç¬¬ä¸æ¬¡åµåï¼](https://openjdk.java.net/jeps/417) - [JEP 418: Internet-Address Resolution SPIï¼äºèç½å°åè§£æ SPIï¼](https://openjdk.java.net/jeps/418) - [JEP 419: Foreign Function & Memory API (Second Incubator)ï¼å¤é¨å½æ°åå å APIï¼ç¬¬äºæ¬¡åµåï¼](https://openjdk.java.net/jeps/419) ä¸å¾æ¯ä» JDK 8 å° JDK 25 æ¯ä¸ªçæ¬çæ´æ°å¸¦æ¥çæ°ç¹æ§æ°éåæ´æ°æ¶é´ï¼  ç¸å ³é è¯»ï¼ - [OpenJDK Java 18 ææ¡£](https://openjdk.java.net/projects/jdk/18/) - [IntelliJ IDEA | Java 18 åè½æ¯æ](https://mp.weixin.qq.com/s/PocFKR9z9u7-YCZHsrA5kQ) ## JEP 400: UTF-8 by Defaultï¼UTF-8 ä½ä¸ºé»è®¤å符éï¼è½¬æ£ï¼ JDK ç»äºå° UTF-8 设置为é»è®¤å符éã å¨ Java 17 åæ´æ©çæ¬ä¸ï¼é»è®¤åç¬¦éæ¯å¨ Java èææºè¿è¡æ¶æç¡®å®çï¼åå³äºä¸åçæä½ç³»ç»ãåºå设置çå ç´ ï¼å æ¤å卿½å¨çé£é©ãå°±æ¯å¦è¯´ä½ å¨ Mac ä¸è¿è¡æ£å¸¸ç䏿®µæå°æåå°æ§å¶å°ç Java ç¨åºå°äº Windows ä¸å°±ä¼åºç°ä¹±ç ï¼å¦æä½ 䏿卿´æ¹å符éçè¯ã ## JEP 408: Simple Web Serverï¼ç®å Web æå¡å¨ï¼è½¬æ£ï¼ Java 18 ä¹åï¼ä½ å¯ä»¥ä½¿ç¨ `jwebserver` å½ä»¤å¯å¨ä¸ä¸ªç®æçéæ Web æå¡å¨ã ```bash $ jwebserver Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::". Serving /cwd and subdirectories on 127.0.0.1 port 8000 URL: http://127.0.0.1:8000/ ``` è¿ä¸ªæå¡å¨ä¸æ¯æ CGI å Servletï¼åªéäºéææä»¶ã ## JEP 413: Code Snippets in Java API Documentationï¼API ææ¡£ä»£ç çæ®µï¼è½¬æ£ï¼ å¨ Java 18 ä¹åï¼å¦ææä»¬æ³è¦å¨ Javadoc ä¸å¼å ¥ä»£ç çæ®µå¯ä»¥ä½¿ç¨ `
{@code ...}` ã
```java
{@code
lines of source code
}
```
`{@code ...}` è¿ç§æ¹å¼çæçæææ¯è¾ä¸è¬ã
å¨ Java 18 ä¹åï¼å¯ä»¥éè¿ `@snippet` æ ç¾æ¥åè¿ä»¶äºæ
ã
```java
/**
* The following code shows how to use {@code Optional.isPresent}:
* {@snippet :
* if (v.isPresent()) {
* System.out.println("v: " + v.get());
* }
* }
*/
```
`@snippet` è¿ç§æ¹å¼çæçæææ´å¥½ä¸ä½¿ç¨èµ·æ¥æ´æ¹ä¾¿ä¸äºã
## JEP 416: Reimplement Core Reflection with Method Handlesï¼æ¹æ³å¥æéææ ¸å¿åå°ï¼è½¬æ£ï¼
Java 18 æ¹è¿äº `java.lang.reflect.Method`ã`Constructor` çå®ç°é»è¾ï¼ä½¿ä¹æ§è½æ´å¥½ï¼é度æ´å¿«ãè¿é¡¹æ¹å¨ä¸ä¼æ¹å¨ç¸å
³ API ï¼è¿æå³çå¼åä¸ä¸éè¦æ¹å¨åå°ç¸å
³ä»£ç ï¼å°±å¯ä»¥ä½éªå°æ§è½æ´å¥½çåå°ã
OpenJDK 宿¹ç»åºäºæ°èå®ç°çåå°æ§è½åºåæµè¯ç»æã

## JEP 417: Vector APIï¼åé APIï¼ç¬¬ä¸æ¬¡åµåï¼
åéï¼Vectorï¼ API æåç± [JEP 338](https://openjdk.java.net/jeps/338) æåºï¼å¹¶ä½ä¸º[åµå API](http://openjdk.java.net/jeps/11)éæå° Java 16 ä¸ã第äºè½®åµåç± [JEP 414](https://openjdk.java.net/jeps/414) æåºå¹¶éæå° Java 17 ä¸ï¼ç¬¬ä¸è½®åµåç± [JEP 417](https://openjdk.java.net/jeps/417) æåºå¹¶éæå° Java 18 ä¸ï¼ç¬¬åè½®ç± [JEP 426](https://openjdk.java.net/jeps/426) æåºå¹¶éæå°äº Java 19 ä¸ã
åé计ç®ç±å¯¹åéçä¸ç³»åæä½ç»æãåé API ç¨æ¥è¡¨è¾¾åé计ç®ï¼è¯¥è®¡ç®å¯ä»¥å¨è¿è¡æ¶å¯é å°ç¼è¯ä¸ºæ¯æç CPU æ¶æä¸çæä½³åéæä»¤ï¼ä»èå®ç°ä¼äºçææ é计ç®çæ§è½ã
åé API çç®æ æ¯ä¸ºç¨æ·æä¾ç®æ´æç¨ä¸ä¸å¹³å°æ å
³ç表达èå´å¹¿æ³çåé计ç®ã
è¿æ¯å¯¹æ°ç»å
ç´ çç®åæ é计ç®ï¼
```java
void scalarComputation(float[] a, float[] b, float[] c) {
for (int i = 0; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
}
}
```
è¿æ¯ä½¿ç¨ Vector API è¿è¡ççæåé计ç®ï¼
```java
static final VectorSpecies