Java 14 å¼ç®±ï¼æ°ç¹æ§Recordãinstanceofãswitché¦é¦é¦é¦
Java 14 çæ¶åï¼æ°å¢äºè®°å½ Recordãæ¨¡å¼å¹é instanceof çæ°ç¹æ§ï¼è½¬æ£äº Java 12 æ¶ç switch 表达å¼ï¼æä»¬ä¸èµ·æ¥è¿ä¸éã
01ãä¸è½½ JDK 14
æªæ¢å°2023å¹´03æ30æ¥ï¼Java 20 å·²ç»åå¸äºï¼ä¸è¿ä¸æ¯ LTSï¼é¿ææ¯æï¼çæ¬ï¼Java 17ã11ã8 æ¯ç®åæä¾æ¯æç LTS çæ¬ã
è¦æ³å¼ç®±ï¼å¾å ä¸è½½ JDK 14ï¼å¦æä½ ææ´é«çæ¬ï¼å½ç¶ä¹å¯ä»¥ï¼ï¼ä¸ç¶æ¿ä»ä¹å¼ç®±å¢ï¼å¯¹å§ï¼æ 2 å¤å°æ¹å¯ä¾ä¸è½½ï¼Oracle ä¸å¯ä»¥ä¸è½½åç¨çï¼ jdk.java.net ä¸å¯ä»¥ä¸è½½å¼æºçãæä»¬å°±éæ©åè å§ã
æç®åç¨çæ¯ Windows æä½ç³»ç»ï¼æä»¥å°±éæ© Windows çç zip å è¿è¡ä¸è½½ï¼å®æåè®°å¾è§£åã
02ãå级 IntelliJ IDEA
æªæ¢å° 2023å¹´03æ30æ¥ï¼Intellij IDEA çææ°çæ¬æ¯ 2023.1ã
éè¦æ IDEA åçº§å°æ¢å ä½éªç 2020.1 EAPï¼å¦æä½ å½å使ç¨ççæ¬å¤§äºæ¤ï¼å½ç¶ä¹å¯ä»¥ï¼ï¼å¦åæ æ³æ¯æ Java 14 çæ°ç¹æ§ã
社åºççä¸è½½å°åå¦ä¸æç¤ºï¼
[https://www.jetbrains.com/idea/nextversion/#section=windows](https://www.jetbrains.com/idea/nextversion/#section=windows)å®è£ çæ¶åå¯ä»¥æä¹åççæ¬å¸è½½ï¼ä¹å¯ä»¥éæ©ä¿çã宿åï¼æä»¬æ¥æ°å»ºä¸ä¸ª Java 14 ç项ç®ã
01ãinstanceof
æç §æ°ç¹æ§ç顺åºï¼æä»¬å°±å ä» instanceof 说起å§ãæ§å¼ç instanceof çç¨æ³å¦ä¸æç¤ºï¼
public class OldInstanceOf {
public static void main(String[] args) {
Object str = "Java 14ï¼çé¦";
if (str instanceof String) {
String s = (String)str;
System.out.println(s.length());
}
}
}éè¦å ä½¿ç¨ instanceof å¨ if æ¡ä»¶ä¸å¤æ str çç±»åæ¯å¦ä¸º Stringï¼ç¬¬ä¸æ¥ï¼ï¼åå¨ if è¯å¥ä¸å° str 强转为å符串类åï¼ç¬¬äºæ¥ï¼ï¼å¹¶ä¸è¦éæ°å£°æä¸ä¸ªåéç¨äºå¼ºè½¬åçèµå¼ï¼ç¬¬ä¸æ¥ï¼ã
ä¸ä¸ªæ¥éª¤ä¹ä¸ç®å¤ï¼ä½æ»è§å¾åºè¯¥è¿ææ´å¥½çè¯æ³ï¼è¿ä¸ï¼Java 14 å°±æ³å°äºè¿ä¸å±ã
public class NewInstanceOf {
public static void main(String[] args) {
Object str = "Java 14ï¼çé¦";
if (str instanceof String s) {
System.out.println(s.length());
}
}
}å¯ä»¥ç´æ¥å¨ if æ¡ä»¶å¤æç±»åçæ¶åæ·»å ä¸ä¸ªåéï¼å°±ä¸éè¦å强转åå£°ææ°çåéäºãæ¯ä¸æ¯ç¹å«ç®æ´ï¼ä½æ¨¡å¼å¹é ç instanceof å¨ Java 14 䏿¯é¢è§ççï¼é»è®¤æ¯ä¸å¯ç¨çï¼æä»¥è¿æ®µä»£ç 伿ä¸ä¸ªå¥æªçç¼è¯é误ï¼Java 14 ä¸ä¸æ¯ææ¨¡å¼å¹é ç instanceofï¼ã
飿ä¹è§£å³è¿ä¸ªé®é¢å¢ï¼éè¦å¨é¡¹ç®é ç½®ä¸æå¨è®¾ç½®ä¸ä¸è¯è¨ççæ¬ã
è®¾ç½®å®æåï¼ç¼è¯é误就éé£é£èµ°äºãç¨åºè¾åºçç»æå¦ä¸æç¤ºï¼
10ä¸éä¸éï¼çé¦ãæ³ç¥é Java ç¼è¯å¨å¨èå帮æä»¬åäºä»ä¹åï¼çä¸ä¸åç¼è¯åçåèç å°±æç½äºã
public class NewInstanceOf {
public NewInstanceOf() {
}
public static void main(String[] args) {
Object str = "Java 14ï¼çé¦";
String s;
if (str instanceof String && (s = (String)str) == (String)str) {
System.out.println(s.length());
}
}
}å¨ if æ¡ä»¶å¤æåï¼å
声æäºåé sï¼ç¶åå¨ if æ¡ä»¶ä¸è¿è¡äºå¼ºè½¬ s = (String)str)ï¼å¹¶ä¸å¤æäº s å str æ¯å¦ç¸çãç¡®å®æ¯ä¸ä¸ªè§£æ¾å¼æ¾è
ç产åçå¥½ç¹æ§ï¼å¼ºç叿è¿ä¸ªç¹æ§å¨ä¸ä¸ªçæ¬ä¸è½¬æ£ã
02ãRecords
å¨ä¹åçä¸ç¯æç« ä¸ï¼æè°å°äºç±»çä¸å¯åæ§ï¼å®æ¯è¿æ ·å®ä¹çï¼
public final class Writer {
private final String name;
private final int age;
public Writer(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}é£ä¹ï¼å¯¹äº Records æ¥è¯´ï¼ä¸æ¡ Record 就代表ä¸ä¸ªä¸åçç¶æã尽管å®ä¼æä¾è¯¸å¦ equals()ãhashCode()ãtoString()ãæé æ¹æ³ï¼ä»¥ååæ®µç getterï¼ä½å®æ ææ¿ä»£å¯å对象çç±»ï¼æ²¡æ setterï¼ï¼ä»¥å Lombok æä¾çåè½ã
æ¥ç¨ Records æ¿ä»£ä¸ä¸ä¸é¢è¿ä¸ª Writer ç±»ï¼
public record Writer(String name, int age) { }ä½ çï¼ä¸è¡ä»£ç å°±æå®ãå ³é®æ¯æ¯ä¹åç代ç åè½æ´ä¸°å¯ï¼æ¥çä¸ä¸åç¼è¯åçåèç ï¼
public final class Writer extends java.lang.Record {
private final java.lang.String name;
private final int age;
public Writer(java.lang.String name, int age) { /* compiled code */ }
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.lang.String name() { /* compiled code */ }
public int age() { /* compiled code */ }
}ç±»æ¯ final çï¼åæ®µæ¯ private final çï¼æé æ¹æ³æä¸¤ä¸ªåæ°ï¼toString()ãhashCode()ãequals() æ¹æ³ä¹æäºï¼getter æ¹æ³ä¹æäºï¼åªä¸è¿æ²¡æ get åç¼ã使¯æ²¡æ setter æ¹æ³ï¼ä¹å°±æ¯è¯´ Records ç¡®å®éå¯¹çæ¯ä¸å¯å对象ââé´å®å®æ¯ã飿ä¹ä½¿ç¨ Records å¢ï¼
public class WriterDemo {
public static void main(String[] args) {
Writer writer = new Writer("æ²é»çäº",18);
System.out.println("toStringï¼" + writer);
System.out.println("hashCodeï¼" + writer.hashCode());
System.out.println("nameï¼" + writer.name());
System.out.println("ageï¼" + writer.age());
Writer writer1 = new Writer("æ²é»çäº", 18);
System.out.println("equalsï¼" + (writer.equals(writer1)));
}
}ç¨åºè¾åºçç»æå¦ä¸æç¤ºï¼
toStringï¼Writer[name=æ²é»çäº, age=18]
hashCodeï¼1130697218
nameï¼æ²é»çäº
ageï¼18
equalsï¼trueä¸éä¸éï¼çé¦ï¼ä»¥åå®ä¹ä¸å¯åç±»æ¶å°±ç®åäºï¼å¼ºç叿è¿ä¸ªç¹æ§å¨ä¸ä¸ªçæ¬ä¸è½¬æ£ã
03ãswitch 表达å¼
å ³äº switch 表达å¼ï¼æå¨ä¹åçä¸ç¯æç« ä¸å·²ç»è¯¦ç»è¯´æäºï¼ç¹å»ä¼ éé¨å¯ä»¥è·³è½¬è¿å»ççã䏤卿¶é´è¿å»äºï¼switch 表达å¼ç»äºâ媳å¦ç¬æå©âï¼è½¬æ£äºï¼æåæåã
è®°å¾è¿ç¯æç« åè¡¨å°æéçæ¶åï¼è¢«å·ååç§æ è dissï¼è¯´ï¼âè¿ä»¥ä¸ºä½ æä»ä¹æå·§ï¼æ²¡æ³å°ç¨çæ¯ Java 13ï¼å¯æä»¬è¿åçå¨ Java 8 åï¼âè¿æ¾ç¶æ¯ä¸ç§åºæ¥èªå°çå¿æï¼é常ä¸å¯åï¼ç¨åºåä¸åºè¯¥è¿æ ·ãä¸ä¸ªæç®åçéçå°±æ¯ï¼Java 6 å½å¹´ä¹å¾ç»å ¸ï¼ä¸æ¯è¢« Java 8 å代äºåï¼éçæ¶é´çæ¨ç§»ï¼Java 8 æ©æä¼è¢«æ´åæ¶ä»£çæ°çæ¬å代ââæ»è¦è¿æ¥åã
å ³äº switch 表达å¼ï¼è¿éå°±ç®åå°æ¬ä¸ªä¾åç»ä½ ç§ç§ï¼
public class SwitchDemo {
enum PlayerTypes {
TENNIS,
FOOTBALL,
BASKETBALL,
PINGPANG,
UNKNOWN
}
public static void main(String[] args) {
System.out.println(createPlayer(PlayerTypes.BASKETBALL));
}
private static String createPlayer(PlayerTypes playerType) {
return switch (playerType) {
case TENNIS -> "ç½çè¿å¨å费德å";
case FOOTBALL -> "è¶³çè¿å¨åCç½";
case BASKETBALL -> "篮çè¿å¨åè©¹å§æ¯";
case PINGPANG -> "ä¹ä¹çè¿å¨å马é¾";
case UNKNOWN -> throw new IllegalArgumentException("æªç¥");
};
}
}é¤äºå¯ä»¥ä½¿ç¨ -> çæ°å¼è¯æ³ï¼è¿å¯ä»¥ä½ä¸º return ç»æï¼çé¦ã
04ãText Blocks
卿æ¬åï¼Text Blocksï¼åºç°ä¹åï¼å¦ææä»¬éè¦æ¼æ¥å¤è¡çå符串ï¼å°±éè¦å¾å¤è±æåå¼å·åå å·ï¼çèµ·æ¥å°±å¥½åè太å©ç裹èå¸ï¼é常ä¸é
ã妿æ°å¥½è¦æ¼æ¥ä¸äº HTML æ ¼å¼çææ¬ï¼åç SQL 乿¯å¦æ¤ï¼çè¯ï¼è¿è¦éè¿ç©ºæ ¼è¿è¡æçï¼éè¿æ¢è¡è½¬ä¹ç¬¦ \n è¿è¡æ¢è¡ï¼è¿äºç¹ççå·¥ä½å¯¹äºä¸åå¼åäººåæ¥è¯´ï¼ç®ç´å°±æ¯ç¾é¾ã
public class OldTextBlock {
public static void main(String[] args) {
String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
System.out.println(html);
}
}Java 14 å°±å®å ¨ä¸åäºï¼
public class NewTextBlock {
public static void main(String[] args) {
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
System.out.println(html);
}
}å¤ä½çè±æåå¼å·ãå å·ãæ¢è¡è½¬ä¹ç¬¦ï¼ç»ç»ä¸è§äºãä» ä» æ¯éè¿ååä¸ä¸ªè±æåå¼å·å°±å®ç°äºãæåªè½è¯´ï¼é¦ï¼å®ççé¦ï¼
GitHub 䏿 æ 10000+ ç弿ºç¥è¯åºãäºå¥ç Java è¿é¶ä¹è·¯ã第ä¸ç PDF ç»äºæ¥äºï¼å æ¬Javaåºç¡è¯æ³ãæ°ç»&å符串ãOOPãéåæ¡æ¶ãJava IOãå¼å¸¸å¤çãJava æ°ç¹æ§ãç½ç»ç¼ç¨ãNIOãå¹¶åç¼ç¨ãJVMççï¼å ±è®¡ 32 ä¸ä½åï¼500+å¼ æç»å¾ï¼å¯ä»¥è¯´æ¯éä¿ææãé£è¶£å¹½é»â¦â¦è¯¦æ æ³ï¼å¤ªèµäºï¼GitHub 䏿 æ 10000+ ç Java æç¨
å¾®ä¿¡æ æ²é»çäº ææ«æä¸æ¹äºç»´ç å ³æ³¨äºå¥çååå ¬ä¼å·æ²é»çäºï¼åå¤ 222 å³å¯å è´¹é¢åã

