--- title: Java 14 æ°ç¹æ§æ¦è§ category: Java tag: - Javaæ°ç¹æ§ --- ## 空æéå¼å¸¸ç²¾åæç¤º éè¿ JVM 忰䏿·»å `-XX:+ShowCodeDetailsInExceptionMessages`ï¼å¯ä»¥å¨ç©ºæéå¼å¸¸ä¸è·åæ´ä¸ºè¯¦ç»çè°ç¨ä¿¡æ¯ï¼æ´å¿«çå®ä½åè§£å³é®é¢ã ```java a.b.c.i = 99; // åè®¾è¿æ®µä»£ç ä¼åç空æé ``` Java 14 ä¹åï¼ ```java Exception in thread "main" java.lang.NullPointerException at NullPointerExample.main(NullPointerExample.java:5) ``` Java 14 ä¹åï¼ ```java // å¢å åæ°åæç¤ºçå¼å¸¸ä¸å¾æç¡®çåç¥äºåªéä¸ºç©ºå¯¼è´ Exception in thread "main" java.lang.NullPointerException: Cannot read field 'c' because 'a.b' is null. at Prog.main(Prog.java:5) ``` ## switch çå¢å¼º(转æ£) Java12 å¼å ¥ç switchï¼é¢è§ç¹æ§ï¼å¨ Java14 å为æ£å¼çæ¬ï¼ä¸éè¦å¢å åæ°æ¥å¯ç¨ï¼ç´æ¥å¨ JDK14 ä¸å°±è½ä½¿ç¨ã Java12 为 switch 表达å¼å¼å ¥äºç±»ä¼¼ lambda è¯æ³æ¡ä»¶å¹é æååçæ§è¡åï¼ä¸éè¦å¤å break ï¼Java13 æä¾äº `yield` æ¥å¨ block ä¸è¿åå¼ã ```java String result = switch (day) { case "M", "W", "F" -> "MWF"; case "T", "TH", "S" -> "TTS"; default -> { if(day.isEmpty()) yield "Please insert a valid day."; else yield "Looks like a Sunday."; } }; System.out.println(result); ``` ## é¢è§æ°ç¹æ§ ### record å ³é®å `record` å ³é®åå¯ä»¥ç®å **æ°æ®ç±»**ï¼ä¸ä¸ª Java ç±»ä¸æ¦å®ä¾åå°±ä¸è½åä¿®æ¹ï¼çå®ä¹æ¹å¼ï¼ä½¿ç¨ `record` ä»£æ¿ `class` å®ä¹çç±»ï¼åªéè¦å£°æå±æ§ï¼å°±å¯ä»¥å¨è·å¾å±æ§çè®¿é®æ¹æ³ï¼ä»¥å `toString()`ï¼`hashCode()`, `equals()`æ¹æ³ 类似äºä½¿ç¨ `class` å®ä¹ç±»ï¼åæ¶ä½¿ç¨äº lombok æä»¶ï¼å¹¶æä¸äº`@Getter,@ToString,@EqualsAndHashCode`注解 ```java /** * è¿ä¸ªç±»å ·æä¸¤ä¸ªç¹å¾ * 1. æææå屿§é½æ¯final * 2. å ¨é¨æ¹æ³ç±æé æ¹æ³ï¼å两个æå屿§è®¿é®å¨ç»æï¼å ±ä¸ä¸ªï¼ * é£ä¹è¿ç§ç±»å°±å¾éå使ç¨recordæ¥å£°æ */ final class Rectangle implements Shape { final double length; final double width; public Rectangle(double length, double width) { this.length = length; this.width = width; } double length() { return length; } double width() { return width; } } /** * 1. 使ç¨record声æçç±»ä¼èªå¨æ¥æä¸é¢ç±»ä¸çä¸ä¸ªæ¹æ³ * 2. å¨è¿åºç¡ä¸è¿éèµ äºequals()ï¼hashCode()æ¹æ³ä»¥åtoString()æ¹æ³ * 3. toStringæ¹æ³ä¸å æ¬æææå屿§çå符串表示形å¼åå ¶åç§° */ record Rectangle(float length, float width) { } ``` ### ææ¬å Java14 ä¸ï¼ææ¬åä¾ç¶æ¯é¢è§ç¹æ§ï¼ä¸è¿ï¼å ¶å¼å ¥äºä¸¤ä¸ªæ°ç转ä¹åç¬¦ï¼ - `\` : 表示è¡å°¾ï¼ä¸å¼å ¥æ¢è¡ç¬¦ - `\s` ï¼è¡¨ç¤ºåä¸ªç©ºæ ¼ ```java String str = "å¡å¿æåï¼ç´ å±¥æå¾ï¼çå¦éæ ï¼ä¸è以èªã"; String str2 = """ å¡å¿æåï¼ç´ å±¥æå¾ï¼ \ çå¦éæ ï¼ä¸è以èªã"""; System.out.println(str2);// å¡å¿æåï¼ç´ å±¥æå¾ï¼ çå¦éæ ï¼ä¸è以èªã String text = """ java c++\sphp """; System.out.println(text); //è¾åºï¼ java c++ php ``` ### instanceof å¢å¼º ä¾ç¶æ¯**é¢è§ç¹æ§** ï¼Java 12 æ°ç¹æ§ä¸ä»ç»è¿ã ## Java14 å ¶ä»ç¹æ§ - ä» Java11 å¼å ¥ç ZGC ä½ä¸ºç»§ G1 è¿åçä¸ä¸ä»£ GC ç®æ³ï¼ä»æ¯æ Linux å¹³å°å° Java14 å¼å§æ¯æ MacOS å Windowï¼ä¸ªäººæè§æ¯ç»äºå¯ä»¥å¨æ¥å¸¸å¼åå·¥å ·ä¸å ä½éªä¸ ZGC çææäºï¼è½ç¶å ¶å® G1 ä¹å¤ç¨ï¼ - ç§»é¤äº CMS(Concurrent Mark Sweep) å徿¶éå¨ï¼åæèéï¼ - æ°å¢äº jpackage å·¥å ·ï¼æ é å°åºç¨ææ jar å å¤ï¼è¿æ¯æä¸åå¹³å°çç¹æ§å ï¼æ¯å¦ linux ä¸ç`deb`å`rpm`ï¼window å¹³å°ä¸ç`msi`å`exe`