--- title: Java 18 æ°ç¹æ§æ¦è§ category: Java tag: - Javaæ°ç¹æ§ --- Java 18 å¨ 2022 å¹´ 3 æ 22 æ¥æ£å¼åå¸ï¼éé¿ææ¯æçæ¬ã Java 18 带æ¥äº 9 个æ°ç¹æ§ï¼ - [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ï¼Java 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 ](https://openjdk.java.net/jeps/417)ï¼ç¬¬ä¸æ¬¡åµåï¼ - [JEP 418:Internet-Address Resolutionï¼äºèç½å°åè§£æï¼SPI](https://openjdk.java.net/jeps/418) - [JEP 419:Foreign Function & Memory APIï¼å¤é¨å½æ°åå å APIï¼](https://openjdk.java.net/jeps/419)ï¼ç¬¬äºæ¬¡åµåï¼ - [JEP 420:Pattern Matching for switchï¼switch 模å¼å¹é ï¼](https://openjdk.java.net/jeps/420)ï¼ç¬¬äºæ¬¡é¢è§ï¼ - [JEP 421:Deprecate Finalization for Removal](https://openjdk.java.net/jeps/421) Java 17 ä¸å å« 14 ä¸ªç¹æ§ï¼Java 16 ä¸å å« 17 ä¸ªç¹æ§ï¼Java 15 ä¸å å« 14 ä¸ªç¹æ§ï¼Java 14 ä¸å å« 16 ä¸ªç¹æ§ãç¸æ¯äºåé¢åå¸ççæ¬æ¥è¯´ï¼Java 18 çæ°ç¹æ§å°äºå¾å¤ã è¿éåªå¯¹ 400ã408ã413ã416ã417ã418ã419 è¿å 个æè§å¾æ¯è¾éè¦çæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ã ç¸å ³é è¯»ï¼ - [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 JDK ç»äºå° UTF-8 设置为é»è®¤å符éã å¨ Java 17 åæ´æ©çæ¬ä¸ï¼é»è®¤åç¬¦éæ¯å¨ Java èææºè¿è¡æ¶æç¡®å®çï¼åå³äºä¸åçæä½ç³»ç»ãåºå设置çå ç´ ï¼å æ¤å卿½å¨çé£é©ãå°±æ¯å¦è¯´ä½ å¨ Mac ä¸è¿è¡æ£å¸¸ç䏿®µæå°æåå°æ§å¶å°ç Java ç¨åºå°äº Windows ä¸å°±ä¼åºç°ä¹±ç ï¼å¦æä½ 䏿卿´æ¹å符éçè¯ã ## JEP 408:ç®æç 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:ä¼å Java 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:ä½¿ç¨æ¹æ³å¥æéæ°å®ç°åå°æ ¸å¿
Java 18 æ¹è¿äº `java.lang.reflect.Method`ã`Constructor` çå®ç°é»è¾ï¼ä½¿ä¹æ§è½æ´å¥½ï¼é度æ´å¿«ãè¿é¡¹æ¹å¨ä¸ä¼æ¹å¨ç¸å
³ API ï¼è¿æå³çå¼åä¸ä¸éè¦æ¹å¨åå°ç¸å
³ä»£ç ï¼å°±å¯ä»¥ä½éªå°æ§è½æ´å¥½åå°ã
OpenJDK 宿¹ç»åºäºæ°èå®ç°çåå°æ§è½åºåæµè¯ç»æã

## JEP 417: åé 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