ปัญหาของโลกก็คือปัญหาของโลก และ Java ใหม่ก็เป็นไปตามกำหนดเวลา นั่นคือทุกๆ หกเดือน Java 14 เวอร์ชันวางจำหน่ายเปิดตัวเมื่อวันที่ 17 มีนาคม และนำเสนอนวัตกรรมที่น่าสนใจหลายประการสำหรับภาษาที่มุ่งเป้าไปที่นักพัฒนา หนึ่งในนั้นคือการสนับสนุนเชิงทดลองสำหรับ คีย์เวิร์ดของเรกคอร์ดการสนับสนุนการจับคู่รูปแบบในตัวดำเนินการ " instanceof " NullPointerExceptionsที่ใช้งานง่ายยิ่งขึ้นขยาย "การแสดงตัวอย่าง" ของบล็อกข้อความสวิตช์เริ่มต้นที่อัปเดต และอื่นๆ อีกมากมาย เราขอเตือนคุณว่านวัตกรรมทั้งหมดใน Java เริ่มต้นด้วยข้อเสนอส่วนขยาย ( JEP, Java Enhancement Proposals ) นักพัฒนาเสนอการเปลี่ยนแปลง โดยจะได้รับการตรวจสอบโดยผู้ปกครอง Java “อย่างเป็นทางการ” จากนั้นการเปลี่ยนแปลงบางส่วนจะได้รับการยอมรับ หลังจากนั้นการเปลี่ยนแปลงเหล่านั้นก็จะกลายเป็นส่วนหนึ่งของ JDK และตอนนี้ - เกี่ยวกับทุกสิ่งตามลำดับ
JEP 359: บันทึก
Records หรือที่รู้จักกันในชื่อ Records นั้นพร้อมใช้งานสำหรับ JDK 14 ในโหมดแสดงตัวอย่าง และนี่คือสิ่งใหม่สำหรับ Java อันที่จริง เรามีรูปแบบใหม่ที่ได้รับการพัฒนาในระหว่าง โครงการ Valhallaต่อหน้า เรา บันทึกจะคล้ายกับการแจงนับและช่วยให้คุณลดความซับซ้อนของโค้ดได้ โดยพื้นฐานแล้ว พวกมันจะแทนที่คลาสที่มีสถานะแต่ไม่มีพฤติกรรม พูดง่ายๆ ก็คือ มีเขตข้อมูล แต่ไม่มีวิธีการ ในกรณีของคลาส บางครั้งเราต้องเขียนโค้ดซ้ำๆ จำนวนมากซึ่งไม่จำเป็นเสมอไป: constructors, accessors, เท่ากับ(), hashCode(), toString()ฯลฯ เพื่อหลีกเลี่ยงโค้ดที่ซ้ำกันนี้ Java จึงวางแผน เพื่อใช้บันทึก นี่คือเวอร์ชันคลาสสิก:final class Triangle {
public final int x;
public final int y;
public final int z;
public Triangle(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
// equals, hashCode, toString
ย้ายไปที่ Java 14 และใช้บันทึก:
public record Triangle(int x, int y, int z){}
นั่นคือทั้งหมดที่ โปรดทราบว่าขณะนี้การบันทึกมีอยู่ในรูปแบบแสดงตัวอย่าง ดังนั้นหากต้องการทดลองใช้งานจริง คุณต้องดาวน์โหลด jdk14 และป้อนคำสั่ง:
javac —enable-preview —release 14 Triangle.java
บันทึกคือคลาส แม้ว่าจะมีข้อจำกัดก็ตาม พวกเขาไม่สามารถขยายคลาสอื่นหรือประกาศฟิลด์ (ยกเว้นขั้นสุดท้ายส่วนตัวซึ่งสอดคล้องกับองค์ประกอบการประกาศสถานะ) บันทึกถือเป็นที่สิ้นสุดโดยปริยายและไม่สามารถถือเป็นนามธรรมได้ บันทึกแตกต่างจากคลาสปกติตรงที่ไม่สามารถแยก API ออกจากการเป็นตัวแทนได้ แต่การสูญเสียอิสรภาพได้รับการชดเชยด้วยความแม่นยำที่เพิ่มขึ้น ส่วนประกอบของบันทึกถือเป็นที่สิ้นสุดโดยปริยายเช่นกัน
JEP 305: การจับคู่รูปแบบสำหรับอินสแตนซ์ (ดูตัวอย่าง)
คุณลักษณะการจับคู่รูปแบบซึ่งเปิดตัวใน Java 14 ในหน้าตัวอย่าง ได้รับการออกแบบมาเพื่อรวมการตรวจสอบประเภทของออบเจ็กต์และการแปลง ใน อินสแตนซ์ ของตัวดำเนินการ กล่าวอีกนัยหนึ่ง ก่อน Java 14 จะต้องมีโค้ดต่อไปนี้:Object object = Violin;
if (object instanceof Instrument) {
Instrument instrument = (Instrument) object;
System.out.println(instrument.getMaster());
}
อย่างที่คุณเห็น เราต้องส่งอ็อบเจ็กต์ไปยังคลาสที่เราต้องการใช้เมธอด ตอนนี้ Java 14 และคุณสมบัติการจับคู่รูปแบบที่เชื่อมต่อช่วยให้คุณสามารถลดโค้ดเป็นดังนี้:
Object object = Violin;
if (object instanceof Instrument instrument){
System.out.println(instrument.getMaster());
}
JEP 343: เครื่องมือบรรจุภัณฑ์ (ตู้ฟัก)
JDK 8 มี เครื่องมือ javapackagerที่ออกแบบมาสำหรับ JavaFX อย่างไรก็ตาม หลังจากการแยก JavaFX ออกจาก Java ด้วยการเปิดตัว JDK 11 ทำให้ javapackager ยอดนิยมไม่สามารถใช้งานได้อีกต่อไป Javapackagerเป็นเครื่องมือบรรจุภัณฑ์ อนุญาตให้บรรจุแอปพลิเคชัน Java ในลักษณะที่สามารถติดตั้งได้เหมือนกับโปรแกรม "ปกติ" อื่น ๆ ทั้งหมด ตัวอย่างเช่น สร้างไฟล์ exe สำหรับผู้ใช้ Windows และเปิดแอปพลิเคชัน Java เหมือนมนุษย์ด้วยการดับเบิลคลิก แน่นอนว่าเครื่องมือดังกล่าวขาดไปอย่างมาก ดังนั้นJEP 343 จึง แนะนำเครื่องมือใหม่jpackageซึ่งรวมแอปพลิเคชัน Java ไว้ในแพ็คเกจเฉพาะแพลตฟอร์มที่มีการขึ้นต่อกันที่จำเป็นทั้งหมด รูปแบบแพ็คเกจที่รองรับสำหรับแพลตฟอร์มเฉพาะ:- Linux: deb และ rpm
- macOS: pkg และ dmg
- Windows: MSI และ EXE
ต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาของ Java หรือไม่ อ่านบทความเกี่ยวกับเวอร์ชันก่อนหน้า! Java 13: คุณสมบัติใหม่ Java 12 มาแล้ว: มีอะไรใหม่? Java 11 เปิดตัวแล้ว: คุณสมบัติและความสามารถใหม่ ตั้งแต่ 8 ถึง 13: ภาพรวมทั้งหมดของเวอร์ชัน Java ส่วนที่ 1 ตั้งแต่ 8 ถึง 13: ภาพรวมทั้งหมดของเวอร์ชัน Java ส่วนที่ 2 |
JEP 345: การจัดสรรหน่วยความจำ NUMA-Aware สำหรับ G1
JEP 345 ทำหน้าที่สนับสนุน NUMA (การเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ) เท่านั้น สถาปัตยกรรมเหล่านี้เป็นสถาปัตยกรรมการเข้าถึงหน่วยความจำที่แตกต่างกัน ซึ่งเป็นวิธีการตั้งค่าคลัสเตอร์ไมโครโปรเซสเซอร์ในระบบมัลติโปรเซสเซอร์ซึ่งสามารถกระจายหน่วยความจำภายในเครื่องได้ โดยแต่ละคอร์ของโปรเซสเซอร์จะได้รับหน่วยความจำในตัวเครื่องจำนวนเล็กน้อย ในขณะที่คอร์อื่นๆ สามารถเข้าถึงได้ JEP 345 วางแผนที่จะติดตั้งเครื่องรวบรวมขยะ G1 ด้วยความสามารถในการใช้ประโยชน์จากสถาปัตยกรรมดังกล่าว แนวทางนี้ช่วยปรับปรุงประสิทธิภาพของเครื่องจักรที่ทรงพลังมากJEP 349: การสตรีมเหตุการณ์ JFR
Java Flight Recorder (JFR)เป็นส่วนหนึ่งของ OpenJDK แล้วและสามารถใช้งานได้ฟรี JDK 14 เพิ่ม API สำหรับการติดตามเหตุการณ์ JFR (JDK Flight Recorder) ได้ทันที โดยเฉพาะอย่างยิ่งสำหรับการจัดการตรวจสอบแอปพลิเคชันที่ใช้งานอยู่และไม่ได้ใช้งานอย่างต่อเนื่อง เหตุการณ์เดียวกันนี้จะถูกบันทึกเช่นเดียวกับตัวเลือกที่ไม่ใช่การสตรีม โดยมีค่าใช้จ่ายน้อยกว่า 1% วิธีนี้กิจกรรมต่างๆ จะถูกสตรีมในเวลาเดียวกันกับตัวเลือกที่ไม่ใช่การสตรีม อย่างไรก็ตาม JEP 349 ต้องไม่อนุญาตให้มีการโทรกลับแบบซิงโครนัสสำหรับผู้บริโภคที่เกี่ยวข้อง แม้แต่ข้อมูลจากบันทึกที่เก็บไว้ในหน่วยความจำระดับกลางก็ไม่ควรสามารถเข้าถึงได้ ในทางเทคนิคแล้ว แพ็กเกจ jdk.jfr.consumer ในโมดูล jdk.jfr จะถูกขยายด้วยฟังก์ชันการทำงานสำหรับการเข้าถึงเหตุการณ์แบบอะซิงโครนัสJEP 352: บัฟเฟอร์ไบต์ที่แมปแบบไม่ลบเลือน
ดังที่เราทราบJava NIO (New IO) File APIมีมาตั้งแต่ JDK 1.4 และมีการเพิ่มประสิทธิภาพใหม่ที่เรียกว่า Path Path เป็นอินเทอร์เฟซที่แทนที่คลาส java.io.File เพื่อเป็นตัวแทนของไฟล์หรือไดเร็กทอรีเมื่อเราทำงานใน Java NIO JEP 352 ขยาย MappedByteBuffer เพื่อโหลดข้อมูลไฟล์บางส่วนลงในหน่วยความจำแบบไม่ลบเลือน (NVM) หน่วยความจำคอมพิวเตอร์นี้ ซึ่งข้อมูลจะไม่สูญหายแม้ว่าจะปิดเครื่องแล้ว (หรือมักเรียกว่าหน่วยความจำแบบอ่านอย่างเดียว) จะถูกใช้เพื่อจัดเก็บข้อมูลอย่างถาวร ข้อเสนอการปรับปรุง Java นี้จัดเตรียมโมดูลและคลาสใหม่สำหรับ JDK API: โมดูล jdk.nio.mapmode ซึ่งมีโหมดใหม่ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) สำหรับการสร้างบัฟเฟอร์ไบต์ที่แมป (MappedByteBuffer) ที่อ้างอิงถึง NVMJEP 358: NullPointerExceptions ที่เป็นประโยชน์
NullPointerExceptions จะ เป็นมิตรกับโปรแกรมเมอร์มากขึ้น ในแง่ที่ว่าคำอธิบายของข้อยกเว้นจะมีข้อมูลมากกว่าเมื่อก่อนมาก เนื่องจาก JVM ได้รับการสอนให้วิเคราะห์คำสั่งโค้ดไบต์ของโปรแกรมได้แม่นยำยิ่งขึ้น และสามารถระบุตัวแปรที่นำไปสู่ค่าศูนย์ได้ สมมติว่าเรามีรหัส:a.getMessage().getUserInfo().getName()
ใน Java ล่าสุดใด ๆ เราจะได้รับบันทึกข้อผิดพลาดตามปกติซึ่งไม่ได้ตอบคำถามว่าใครเป็นโมฆะ:
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:12)
และนี่คือสิ่งที่ Java 14 จะมอบให้คุณหากคุณตัดสินใจลองใช้ฟีเจอร์แสดงตัวอย่างนี้:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "UserInfo().getName()" because the return value of "Message().getUserInfo()" is null
at Main.main(Main.java:12)
สายโซ่นี้เข้าใจได้ง่ายกว่ามากและช่วยให้คุณแก้ไขข้อผิดพลาดได้เร็วยิ่งขึ้น
JEP 361: สลับนิพจน์ (มาตรฐาน)
ตัวดำเนินการสวิตช์ที่อัปเดตมีให้ใช้งานใน Java 12 และ 13 ก่อนหน้า แต่เป็นคุณสมบัติการแสดงตัวอย่างเท่านั้น กล่าวคือ ไม่ได้เปิดใช้งานตามค่าเริ่มต้น ตอนนี้ใน JDK 14 ทุกอย่างทำงานนอกกรอบ Java 14 แนะนำรูปแบบใหม่ของบล็อกสวิตช์ที่เรียบง่ายพร้อมป้ายกำกับตัวพิมพ์ L -> ... แบบฟอร์มใหม่ทำให้โค้ดง่ายขึ้นในบางกรณี นี่คือตัวอย่างบางส่วน สมมติว่าเรามีแจงนับที่อธิบายวันในสัปดาห์ เราสามารถเขียนโค้ดคลาสสิก (ก่อน Java 14):switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
และนี่คือตัวเลือกที่ใช้ Java 14:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
คุณยังสามารถเขียนบล็อกหลายบรรทัดและส่งกลับค่าด้วยคีย์เวิร์ด Yield ใหม่ได้:
int result = switch (s) {
case "Working from Home" -> 1;
case "Working from Office" -> 2;
default -> {
System.out.println("Neither Home nor Office… Cafe? Car? Park?...");
yield 0;
}
};
มีสิ่งสำคัญอีกสองสามประการที่ต้องคำนึงถึงเมื่อใช้สวิตช์ใหม่ โดยเฉพาะอย่างยิ่งคุณต้องจำไว้ว่าตัวเลือกต่างๆ จะต้องครบถ้วนสมบูรณ์ นั่นคือสำหรับค่าที่เป็นไปได้ทั้งหมดจะต้องมีป้ายกำกับสวิตช์ที่เกี่ยวข้อง เนื่องจาก ตอนนี้ Yieldเป็นคีย์เวิร์ดแล้ว คลาสที่ชื่อ Yield จึงเป็นไปได้ใน Java 14 โดยทั่วไป หากคุณต้องการเรียนรู้วิธีใช้สวิตช์ที่อัปเดต ให้ไปที่JEP 361แล้วศึกษา มีข้อมูลที่น่าสนใจมากมายที่นั่น
JEP 362: เลิกใช้พอร์ต Solaris และ SPARC
ไม่น่าเป็นไปได้ที่ผู้อ่านของเราหลายคนจะจำเกี่ยวกับ ระบบปฏิบัติการ Solarisได้ ระบบปฏิบัติการที่ใช้ UNIX นี้สร้างขึ้นโดย Sun Microsystems ซึ่งเป็นผู้ปกครองของ Java ใช้สำหรับเซิร์ฟเวอร์บนสถาปัตยกรรม SPARC เป็นหลัก... มีคำที่ไม่คุ้นเคยมากเกินไปต่อตารางเซนติเมตรใช่หรือไม่ ไม่ใช่เรื่องใหญ่อะไร: JEP 362 สิ้นสุดการสนับสนุนสำหรับแพลตฟอร์ม Solaris/SPARC, Solaris/x64 และ Linux/SPARC นั่นคือพอร์ตของพวกเขาเลิกใช้แล้ว และในอนาคตพอร์ตเหล่านี้มีแนวโน้มที่จะถูกลบออกจาก OpenJDK อย่างไรก็ตาม Java เวอร์ชันเก่า (ก่อน JDK 14) ที่เกี่ยวข้องกับพอร์ต Solaris/SPARC, Solaris/x64 และ Linux/SPARC ควรทำงานโดยไม่มีการแก้ไข หากคุณเป็นผู้ชื่นชอบประวัติศาสตร์และสนใจในเทคโนโลยีแห่ง อดีต อันไม่ไกลนัก ไปที่ Wikipedia และอ่านเกี่ยวกับ สถาปัตยกรรม SPARSJEP 363: ลบตัวรวบรวมขยะ Concurrent Mark Sweep (CMS)
ตัวรวบรวมขยะ CMS (Concurrent Mark Sweep) มีเป้าหมายในการลบออก เนื่องจากเมื่อสองปีที่แล้วถูกทำเครื่องหมายว่าล้าสมัยและปล่อยทิ้งไว้โดยไม่ได้รับการดูแล อย่างไรก็ตาม ผู้ใช้ Java เวอร์ชันเก่าที่ใช้ CMS GC สามารถหายใจออกได้ - จุดประสงค์ของ JEP นี้ไม่ใช่เพื่อลบตัวสร้างออกจาก JDK รุ่นก่อนหน้า นอกจากนี้ การรวมอัลกอริธึมการรวบรวมขยะ ParallelScavenge และ SerialOld (ที่ทำงานด้วยตัวเลือก "-XX:+UseParallelGC -XX:-UseParallelOldGC") ได้ถูกเลิกใช้แล้วJEP 364: ZGC บน macOSและJEP 365: ZGC บน Windows
มีรถเก็บขยะที่น่าสนใจชื่อว่าZ Garbage Collector (ZGC ) มันทำงานในโหมดพาสซีฟและพยายามลดความล่าช้าเนื่องจากการรวบรวมขยะ: เวลาหยุดเมื่อใช้ ZGC ไม่เกิน 10 ms สามารถทำงานกับฮีปขนาดเล็กและฮีปขนาดใหญ่ได้ (ซึ่งใช้พื้นที่หลายเทราไบต์) JEP 364 และ JEP 365 เป็นแฝดกันจริงๆ JEP 364 นำ Z Garbage Collector มาสู่ MacOS ส่วนหนึ่งของ JEP ยังอธิบายฟังก์ชันการทำงานของตัวรวบรวมสำหรับการเพิ่มหน่วยความจำอุปกรณ์ที่ไม่ได้ใช้ ตามที่ระบุไว้ในJEP 351สิ่งนี้เกิดขึ้นตั้งแต่ Java 13 การใช้งาน ZGC บน macOS มีสองส่วน:- รองรับหน่วยความจำหลายแผนที่บน macOS
- รองรับ ZGC สำหรับการสำรองหน่วยความจำอย่างต่อเนื่อง
- รองรับหน่วยความจำหลายแผนที่
- รองรับการแมปหน่วยความจำตามไฟล์เพจลงในพื้นที่ที่อยู่ที่สงวนไว้
- รองรับการแมปและการแมปส่วนต่างๆ ของฮีปตามอำเภอใจ
- รองรับการคอมมิตและไม่คอมมิตส่วนต่างๆ ของฮีป
JEP 366: เลิกใช้การรวม ParallelScavenge + SerialOld GC
JEP นี้เลิกใช้การรวมกันของ Parallel Scavenge และอัลกอริธึมการรวบรวมขยะแบบเก่าแบบอนุกรม ต้องเปิดใช้งานชุดค่าผสมนี้ด้วยตนเองโดยใช้พารามิเตอร์บรรทัดคำสั่ง -XX: + UseParallelGC -XX: -UseParallelOldGC ผู้เขียนเชื่อว่าชุดค่าผสมนี้มีความเฉพาะเจาะจงมาก แต่ก็ต้องใช้ความพยายามในการบำรุงรักษาอย่างมากเช่นกัน ดังนั้นตอนนี้ตัวเลือก -XX: UseParallelOldGC เลิกใช้แล้ว และคำเตือนจะปรากฏขึ้นหากใช้JEP 367: ลบเครื่องมือ Pack200 และ API
Pack200เป็นรูปแบบไฟล์เก็บถาวรที่ปรับให้เหมาะสมสำหรับการจัดเก็บไฟล์คลาส Java ที่คอมไพล์แล้ว เครื่องมือนี้ถูกทำเครื่องหมายว่าเลิกใช้แล้วตั้งแต่ Java 11 ขณะนี้เครื่องมือ API ของ pack200, unpack200 และ Pack200 ได้รับการประกาศอย่างเป็นทางการให้ลบออกจากแพ็คเกจjava.util.jar เทคโนโลยีนี้ถูกนำมาใช้ใน Java 5 เพื่อจัดการกับแบนด์วิธที่จำกัดมาก (โมเด็ม 56k น่ากลัวที่จะพูดและจดจำ) และพื้นที่เก็บข้อมูลไม่เพียงพอบนฮาร์ดไดรฟ์ เมื่อไม่นานมานี้ Java 9 ได้เปิดตัวรูปแบบการบีบอัดข้อมูลใหม่ นักพัฒนาซอฟต์แวร์ได้ รับ การสนับสนุนให้ใช้jlinkJEP 368: บล็อกข้อความ (ตัวอย่างที่สอง)
บล็อกข้อความปรากฏขึ้นครั้งแรกใน Java 13 ซึ่งเป็นตัวอักษรสตริงหลายบรรทัดที่ป้องกันความจำเป็นในการหลีกเลี่ยงลำดับส่วนใหญ่ จัดรูปแบบสตริงโดยอัตโนมัติ และยังอนุญาตให้นักพัฒนาจัดรูปแบบสตริงหากจำเป็น คุณสมบัติที่มีประโยชน์นี้พร้อมใช้งานแล้วใน Java 14 (ตัวอย่างที่ 2) วัตถุประสงค์หลักของบล็อกข้อความคือเพื่อปรับปรุงการจัดการตัวอักษรหลายบรรทัดที่ทำให้เกิดความสับสน ซึ่งช่วยลดความยุ่งยากในการอ่านและเขียนคำสั่ง SQL, โค้ด HTML และ XML และ JSON ได้อย่างมาก ตัวอย่าง HTML ที่ไม่มีบล็อกข้อความ:String html = "<html>\n" +
" <body>\n" +
" <p>Hello, JavaRush Student</p>\n" +
" </body>\n" +
"</html>\n";
วิธีนำเสนอสิ่งเดียวกันกับบล็อกข้อความ:
String html = """
<html>
<body>
<p>Hello, JavaRush Student</p>
</body>
</html>
""";
ตัวคั่นการเปิดคือลำดับของอักขระเครื่องหมายคำพูดคู่ 3 ตัว ("" ") ตามด้วยช่องว่างตั้งแต่ 0 ขึ้นไป ตามด้วยตัวคั่นบรรทัด เนื้อหาเริ่มต้นที่อักขระตัวแรกหลังตัวคั่นบรรทัดของตัวคั่นเปิด ตัวคั่น ปิดคือ มีการเลือก ลำดับของอักขระเครื่องหมายคำพูดคู่สามตัว " _ ) เพื่อให้สามารถแสดงอักขระได้โดยไม่ต้อง Escape และยังแยกความแตกต่างระหว่างบล็อกข้อความจากตัวอักษรสตริงได้ด้วย ในต้นปี 2019 JEP 355 เสนอบล็อกข้อความเป็นส่วนต่อจาก JEP 326 (ตัวอักษรสตริงดิบ) แต่บล็อกข้อความเหล่านั้นถูกถอนออกไป ต่อมาในปีนั้น JDK 13 ได้เปิดตัวฟีเจอร์แสดงตัวอย่างบล็อกข้อความ และตอนนี้ Java 14 ได้เพิ่มลำดับการหลีกเลี่ยงใหม่สองลำดับ นี่คือตัวสิ้นสุดบรรทัด ซึ่งเขียนแทนด้วย \ และตัวที่สองคือสำหรับช่องว่างเดี่ยว ซึ่งเขียนแทนด้วย /s ตัวอย่างการใช้บรรทัดใหม่โดยไม่มีบล็อคข้อความ:
String literal = "This is major Tom to Ground Control " +
"I am stepping through the door... " +
"Wait… What???";
และตอนนี้ด้วยลำดับการหลีกเลี่ยง \<line-terminator>:
String text = """
This is major Tom to Ground Control \
I am stepping through the door... \
Wait… What???\
""";
ลำดับการหลีก\sใช้เพื่อพิจารณาช่องว่างต่อท้าย ซึ่งคอมไพเลอร์จะละเว้นตามค่าเริ่มต้น จะรักษาช่องว่างทั้งหมดที่นำหน้าไว้ ตัวอย่าง:
String text1 = """
line1
line2 \s
line3
""";
String text2 = "line1\nline2 \nline3\n";
text1
และtext2
เหมือนกัน
GO TO FULL VERSION