1. สวิตช์รองรับสตริงเป็นพารามิเตอร์
/*** * สวิตช์รองรับพารามิเตอร์สตริง jdk7 * @author huangjiawei */คลาสสาธารณะ switchtest {public static void switchtest (String arg) {switch (arg) {case "lisa": system.err.println ("ฉันเป็น Lisa!"); หยุดพัก; กรณี "ไมค์": System.err.println ("ฉันคือไมค์!"); หยุดพัก; ค่าเริ่มต้น: system.err.println ("ฉันเป็นคนเดียวของคุณ!"); หยุดพัก; }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {switchtest ("lisa"); // ฉันเป็น lisa! switchtest ("Mike"); // ฉันคือไมค์! switchtest (""); // ฉันเป็นคนเดียวของคุณ! -Switch Switch enumeration support
/** * สลับการแจงนับรองรับ jdk5 * @author huangjiawei * */คลาสสาธารณะ switchmonthtest {โมฆะสาธารณะคงที่ swithmonthtest (เดือนเดือน) {switch (เดือน) {กรณีมกราคม: System.err.println ("นี่คือมกราคม"); หยุดพัก; กรณีกุมภาพันธ์: System.err.println ("นี่คือกุมภาพันธ์"); หยุดพัก; กรณีมีนาคม: System.err.println ("นี่คือเดือนมีนาคม"); หยุดพัก; }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {swithmonthtest (เดือนมกราคม); // นี่คือมกราคม swithmonthtest (เดือนกุมภาพันธ์); // นี่คือเดือนกุมภาพันธ์ swithmonthtest (month.march); // นี่คือเดือนมีนาคม2. การปรับปรุงตัวอักษรตัวเลข
2.1. ก่อน java7 มันรองรับทศนิยม (1234), octal (01234) และ hexadecimal (0x1234)
Java 8 รองรับไบนารี (0B11110001)
2.2. สามารถคั่นด้วย Underscore_
คลาสสาธารณะ Binarytest {ส่วนตัวคงที่ int a = 16; // ทศนิยมส่วนตัวคงที่ int b = 020; // octal ส่วนตัวคงที่ int c = 0x10; // hexadecimal ส่วนตัวคงที่ int d = 0b0001_0000; // binary, ใช้ delimiters System.err.println (b); // 16 System.err.println (C); // 16 System.err.println (d); // 16}}3. ทรัพยากรถูกปิดโดยอัตโนมัติ
ในชวามีทรัพยากรมากมายที่ต้องปิดหลังจากใช้งาน ใช้เกาลัด, อินพุตสตรีม, นักเขียน, ซ็อกเก็ต, การเชื่อมต่อ ฯลฯ ก่อน Java 7 มักจะแสดงวิธีปิด () ใน Java 7 คุณสามารถเพิกเฉยได้ว่าจะไม่ปิดหรือไม่ เราสามารถใช้บล็อกรหัส Try-with-sources
นำเข้า java.io.bufferedreader; นำเข้า java.io.filereader; คลาสสาธารณะ trytest { /** ยอมรับพา ธ ไปยังไฟล์ก่อน java 7* / สตริงคงที่สาธารณะ trytest (เส้นทางสตริง) {bufferedreader br = null; ลอง {br = ใหม่ bufferedReader (ใหม่ filereader (เส้นทาง)); return br.readline (); } catch (exception e) {system.err.println ("bufferedreader exception" + e); } ในที่สุด {ถ้า (br! = null) {ลอง {br.close (); br.ready (); // สตรีมถูกปิดแล้วมีการโยนข้อยกเว้นที่นี่} catch (Exception e) {system.err.println ("ข้อยกเว้นปิดบัฟเฟอร์เดอร์" + e); } } } กลับ ""; } / * * เส้นทางที่จะยอมรับไฟล์ java7 * /สตริงคงที่สาธารณะ trytest1 (เส้นทางสตริง) { / * * เมื่อบล็อกคำสั่งลองทำงาน FileInputStream จะถูกปิดโดยอัตโนมัติ นี่เป็นเพราะ FileInputStream ใช้อินเตอร์เฟส java.lang.autocloseable ใน Java * คลาสทั้งหมดที่ใช้อินเทอร์เฟซนี้สามารถใช้ในโครงสร้างการลอง-ทรัพยากร */ ลอง (bufferedreader br = bufferedreader ใหม่ (ใหม่ filereader (path))) {return br.readline (); } catch (exception e) {system.err.println ("bufferedreader exception" + e); } กลับ ""; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {trytest ("c: //users//huangjiawei//desktop//my-release-key.keystore"); trytest1 ("c: //users//huangjiaweii//desktop//my-release-key.keystore"); -4. จับข้อยกเว้นหลายข้อ
ก่อนที่ Java 7 จะต้องรวมข้อจับหลายข้อเพื่อจับข้อยกเว้นหลายข้อ ใน Java 7 เราสามารถเขียนด้วยวิธีนี้:
นำเข้า java.util.date;/*** คำสั่งจับหลายรายการจะดำเนินการยกเว้นการจับครั้งแรกที่ตรงกับ ไม่ว่าจะมีการจับกี่ครั้งพวกเขาจะถูกเพิกเฉย * @author Huangjiawei * */คลาสสาธารณะ catchtest {/ * * ก่อน java 7 */public static void catchtest () {int a = 100; int b = 0; วันที่วันที่ = null; ลอง {system.err.println (date.getTime ()); // ข้อยกเว้นถูกโยนลงที่นี่และคำสั่งต่อไปนี้จะไม่ถูกดำเนินการ! int result = a/b; // system.err.println (ผลลัพธ์); // ไม่ถูกเรียกใช้} catch (nullpointerexception e) {system.err.println (e); // java.lang.nullpointerexception} catch (arithmeticexception e) } catch (exception e) {system.err.println (e); }} / * * java 7 * / โมฆะสาธารณะคงที่ catchtest1 () {int a = 100; int b = 0; วันที่วันที่ = null; ลอง {int result = a/b; System.err.println (ผลลัพธ์); System.err.println (date.getTime ()); } catch (arithmeticexception | nullpointerexception e) {system.err.println (e); // java.lang.arithmeticexception:/โดย zero}} โมฆะสาธารณะคงที่หลัก (สตริง [] args) {catchtest (); catchtest1 (); -5. การอนุมานประเภทการสร้างอินสแตนซ์
นำเข้า java.util.arraylist; นำเข้า java.util.list; คลาสสาธารณะ typetest { /** ก่อนและหลัง Java 7 ต้องประกาศทั้งสองประเภท* / list <string> list = new ArrayList <String> (); /** java 7, หลังจาก <> ไม่จำเป็นต้องประกาศประเภทและประเภทของมันจะถูกอนุมานโดยอัตโนมัติตาม <>*/ list <string> list1 = arrayList ใหม่ <> ();}6. ระบบไฟล์ที่ปรับปรุงแล้ว
Java7 ได้เปิดตัว NIO2.0 API ใหม่เพื่อเปลี่ยนความไม่สะดวกในการจัดการไฟล์ดังนั้นการใช้ประเภทที่ใช้กันทั่วไปเช่นเส้นทางพา ธ ไฟล์ WatchService ระบบไฟล์และผลิตภัณฑ์อื่น ๆ ภายใต้แพ็คเกจ Java.nio.File สามารถทำให้การเขียนโค้ดของนักพัฒนาได้ง่ายขึ้น
6.1 PATH Interface and Paths Class
ฟังก์ชั่นบางอย่างของอินเทอร์เฟซพา ธ อาจเทียบเท่ากับคลาสไฟล์ภายใต้แพ็คเกจ java.io แน่นอนฟังก์ชั่นเหล่านี้ จำกัด เฉพาะการดำเนินการแบบอ่านอย่างเดียว ในการพัฒนาจริงนักพัฒนาสามารถใช้อินเทอร์เฟซพา ธ และคลาสพา ธ เพื่อรับชุดข้อมูลบริบทของไฟล์
ใช้ประเภทอินเทอร์เฟซพา ธ และพา ธ เพื่อรับข้อมูลไฟล์:
นำเข้า java.nio.file.path; นำเข้า java.nio.file.paths; pathpathstest ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {path path = paths.get ("C: ///Users///huangjiaweii////desktop////////// System.out.println ("จำนวนโหนดไฟล์:" + path.getNameCount ()); // จำนวนของโหนดไฟล์: 4 System.out.println ("ชื่อไฟล์:" + path.getFilename ()); // ชื่อไฟล์: my-release-key.keystore system.out.println ("ไฟล์รูทไฟล์:" + path.getRoot ()); // ไฟล์รูทไดเรกทอรี: C: /system.out.println ("ไฟล์สมาคมที่เหนือกว่า:" + path.getParent ()); // ไฟล์ Superior Association Directory: C:/ผู้ใช้/Huangjiaweii/Desktop}}}6.2. คลาสไฟล์
การใช้อินเทอร์เฟซพา ธ และคลาสพา ธ สามารถเข้าถึงข้อมูลบริบทของไฟล์เป้าหมายได้อย่างง่ายดาย แน่นอนว่าการดำเนินการเหล่านี้เป็นการอ่านอย่างเดียว หากนักพัฒนาต้องการดำเนินการที่ไม่ใช่การอ่านอื่น ๆ ในไฟล์เช่นการสร้างการปรับเปลี่ยนการลบ ฯลฯ พวกเขาสามารถใช้ประเภทไฟล์เพื่อทำงาน
วิธีการทั่วไปประเภทไฟล์มีดังนี้:
ตัวอย่างการคัดลอกและวางไฟล์โดยใช้ประเภทไฟล์:
files.copy (paths.get ("/test/src.xml"), paths.get ("/test/target.xml"));การใช้ประเภทไฟล์เพื่อจัดการไฟล์นั้นสะดวกและเรียบง่ายกว่าวิธี I/O แบบดั้งเดิม เนื่องจากการดำเนินการเฉพาะเจาะจงจะถูกส่งมอบให้กับ NIO2.0 API นักพัฒนาไม่จำเป็นต้องให้ความสนใจ
6.3. Watchservice
Java7 ยังให้ฟังก์ชั่นชุดระบบไฟล์ใหม่ของนักพัฒนาซอฟต์แวร์คือการตรวจสอบไฟล์ อาจมีเพื่อนมากมายที่นี่ที่ไม่ทราบว่าความสำคัญและวัตถุประสงค์ของการตรวจสอบไฟล์คืออะไร ดังนั้นโปรดเรียกคืนเว็บคอนเทนเนอร์ที่ได้รับการแก้ไขข้อบกพร่องเป็นฟังก์ชั่นการเปิดตัวที่ร้อนแรง เมื่อโครงการวนซ้ำและนำไปใช้ใหม่นักพัฒนาไม่จำเป็นต้องรีสตาร์ทด้วยตนเองเพราะเมื่อเว็บคอนเทนเนอร์ตรวจพบว่าไฟล์เปลี่ยนไปมันจะปรับให้เข้ากับ "การเปลี่ยนแปลง" เหล่านี้โดยอัตโนมัติและโหลดซ้ำภายใน ฟังก์ชั่นการเผยแพร่ที่ร้อนแรงของเว็บคอนเทนเนอร์นั้นขึ้นอยู่กับฟังก์ชั่นการตรวจสอบไฟล์ดังนั้นจึงต้องยอมรับว่าการเกิดขึ้นของฟังก์ชั่นการตรวจสอบไฟล์มีความสำคัญอย่างยิ่งต่อระบบไฟล์ Java
การตรวจสอบไฟล์เป็นกิจกรรมที่ขับเคลื่อนด้วยเหตุการณ์และการทริกเกอร์เหตุการณ์เป็นสิ่งที่จำเป็นสำหรับการตรวจสอบ นักพัฒนาสามารถใช้ค่าคงที่ 3 ตัวอักษรที่จัดทำโดยประเภท StandardWatchEventKinds ภายใต้แพ็คเกจ java.nio.File เพื่อกำหนดประเภทเหตุการณ์การตรวจสอบ เป็นที่น่าสังเกตว่าเหตุการณ์การตรวจสอบจะต้องลงทะเบียนกับอินสแตนซ์ WatchService
การตรวจสอบเหตุการณ์ที่จัดทำโดยประเภท StandardWatchEventKinds:
ตัวอย่างที่สมบูรณ์ของการใช้งานการตรวจสอบไฟล์โดยใช้คลาส WatchService:
นำเข้า java.nio.file.filesystems; นำเข้า java.nio.file.path; นำเข้า java.nio.file.paths; นำเข้า java.nio.file.standardwatcheventkinds; นำเข้า Java.nio.watchevent; ระบบตรวจสอบไฟล์* @author Huangjiawei*/คลาสสาธารณะ WatchViewTest {public Static Void TestWatch () {/* ตรวจสอบเส้นทางเป้าหมาย*/เส้นทางพา ธ = paths.get ("c: // ผู้ใช้ // huangjiawei // desktop"); ลอง { /* สร้างวัตถุการตรวจสอบไฟล์ */ watchService watchService = filesystems.getDefault (). newWatchService (); /* ลงทะเบียนทุกประเภทเหตุการณ์สำหรับการตรวจสอบไฟล์ */ path.register (WatchService, StandardWatchEventKinds.entry_Create, StandardWatchEventKinds.entry_delete, StandardWatchEventKinds.entry_modify); /* ไฟล์การตรวจสอบลูป */ ในขณะที่ (จริง) {watchkey watchkey = watchService.take (); /* วนซ้ำไฟล์ทั้งหมดที่ทริกเกอร์เหตุการณ์*/ สำหรับ (watchEvent <?> เหตุการณ์: watchKey.pollevents ()) {system.out.println (event.context (). toString () + "ประเภทเหตุการณ์:" event.kind ()); } if (! watchkey.reset ()) {return; }}} catch (exception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testwatch (); - ผ่านตัวอย่างโปรแกรมข้างต้นเราจะเห็นว่าการใช้อินเตอร์เฟส WatchService สำหรับการตรวจสอบไฟล์นั้นง่ายและสะดวกมาก ก่อนอื่นเราจำเป็นต้องกำหนดเส้นทางการตรวจสอบเป้าหมายจากนั้นเรียกใช้วิธีการพิมพ์ใหม่ของ NewwatchService () ของระบบไฟล์เพื่อสร้างวัตถุ WatchService ต่อไปเราจำเป็นต้องใช้วิธีการลงทะเบียน () ของอินเทอร์เฟซพา ธ เพื่อลงทะเบียนอินสแตนซ์ WatchService และตรวจสอบเหตุการณ์ เมื่อเลเยอร์การทำงานพื้นฐานทั้งหมดเหล่านี้พร้อมเราจะเขียนวงจรการตรวจสอบแบบเรียลไทม์รอบนอก ในที่สุดก็ทำซ้ำกับ WatchKey เพื่อรับไฟล์ทั้งหมดที่เรียกเหตุการณ์การตรวจสอบ
ในที่สุดฉันก็รู้หลักการพื้นฐานของการอัปเดต Hot Dev-tools ใน Spring Boot! ปรากฎว่า JDK ให้ API ดังกล่าว
สรุป
ข้างต้นคือการวิเคราะห์รหัสของ JDK 7 คุณสมบัติใหม่บทนำสั้น ๆ โดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!