ในทางปฏิบัติ การจัดการข้อยกเว้นเป็นมากกว่าแค่การรู้ไวยากรณ์ การเขียนโค้ดที่มีประสิทธิภาพถือเป็นศิลปะมากกว่า และในบทความนี้ เราจะกล่าวถึงแนวทางปฏิบัติที่ดีที่สุดในการจัดการข้อยกเว้น Java แนวทางปฏิบัติที่ดีที่สุดของ Java เหล่านี้เป็นไปตามไลบรารี JDK มาตรฐาน และโค้ดโอเพ่นซอร์สหลายโค้ดสำหรับการจัดการข้อผิดพลาดและข้อยกเว้น นอกจากนี้ยังเป็นคู่มือที่มีประโยชน์สำหรับโปรแกรมเมอร์ Java ในการเขียนโค้ดที่มีประสิทธิภาพ แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อยกเว้นในการเขียนโปรแกรม Java
ต่อไปนี้เป็นคอลเลคชันแนวทางปฏิบัติที่ดีที่สุด 10 ข้อของฉันสำหรับการจัดการข้อยกเว้นในการเขียนโปรแกรม Java มีการยกย่องและวิพากษ์วิจารณ์เกี่ยวกับข้อยกเว้นที่ได้รับการตรวจสอบในการเขียนโปรแกรม Java การบังคับจัดการข้อยกเว้นเป็นหน้าที่ของภาษา ในบทความนี้ เราจะพยายามลดการใช้ข้อยกเว้นที่ตรวจสอบให้เหลือน้อยที่สุด และเรียนรู้การใช้ข้อยกเว้นที่ตรวจสอบแล้วกับที่ไม่ได้ตรวจสอบในการเขียนโปรแกรม Java
1) ใช้การตรวจสอบข้อยกเว้นสำหรับข้อผิดพลาดที่สามารถกู้คืนได้ และข้อผิดพลาดที่ไม่ได้ตรวจสอบสำหรับข้อผิดพลาดในการเขียนโปรแกรม
การเลือกข้อยกเว้นที่เลือกหรือไม่ตรวจสอบจะสร้างความสับสนให้กับโปรแกรมเมอร์ Java เสมอ ข้อยกเว้นที่ได้รับการตรวจสอบให้แน่ใจว่าคุณได้จัดเตรียมโค้ดการจัดการข้อยกเว้นสำหรับเงื่อนไขข้อผิดพลาด นี่เป็นวิธีจากภาษาในการบังคับให้คุณเขียนโค้ดที่มีประสิทธิภาพ แต่ยังทำให้เกิดความยุ่งเหยิงมากมายและทำให้ไม่สามารถอ่านได้ แน่นอนว่า การจับข้อยกเว้นและดำเนินการบางอย่างกับสิ่งเหล่านั้นดูสมเหตุสมผลหากคุณมีกลยุทธ์การเปลี่ยนและกู้คืน เลือกระหว่างข้อยกเว้นที่เลือกหรือข้อยกเว้นรันไทม์ในการเขียนโปรแกรม Java สำหรับข้อมูลเพิ่มเติม โปรดดูข้อยกเว้นที่เลือกและไม่ได้ตรวจสอบ
2) ปิดหรือปล่อยทรัพยากรในบล็อกสุดท้าย
นี่เป็นแนวทางปฏิบัติที่ดีที่สุดที่รู้จักกันดีในการเขียนโปรแกรม Java และเทียบเท่ากับมาตรฐานเมื่อต้องจัดการกับคลาสเครือข่ายและ IO การปิดทรัพยากรในบล็อกสุดท้ายช่วยให้มั่นใจได้ว่าทรัพยากรที่มีอยู่ก่อนหน้านี้และทรัพยากรที่หายากจะถูกปล่อยออกมาอย่างสมเหตุสมผลภายใต้เงื่อนไขการดำเนินการปกติและผิดปกติ ซึ่งรับประกันได้โดยการบล็อกในขั้นสุดท้าย เริ่มต้นด้วย Java 7 ภาษามีคุณสมบัติที่น่าสนใจมากขึ้น: การจัดการทรัพยากรอัตโนมัติหรือบล็อก ARM สามารถใช้คุณสมบัตินี้ได้ อย่างไรก็ตาม เรายังต้องจำไว้ว่าต้องปิดทรัพยากรในบล็อกสุดท้าย ซึ่งเป็นสิ่งสำคัญในการปล่อยทรัพยากรที่มีจำกัด เช่น FileDescriptors ซึ่งใช้ในสถานการณ์ซ็อกเก็ตและการเขียนโปรแกรมไฟล์
3) รวมสาเหตุของข้อยกเว้นไว้ในการติดตามสแต็ก
หลายครั้งที่ไลบรารี Java และโค้ดโอเพ่นซอร์สตัดข้อยกเว้นหนึ่งไปเป็นอีกข้อยกเว้นหนึ่ง เมื่อมีการส่งข้อยกเว้นที่เกิดจากข้อยกเว้นอื่น การบันทึกและการพิมพ์ข้อยกเว้นของรูทมีความสำคัญมาก คลาสข้อยกเว้น Java จัดเตรียมเมธอด getCause() เพื่อดึงสาเหตุของข้อยกเว้น ซึ่งสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุระดับรูทของข้อยกเว้น แนวปฏิบัติ Java นี้มีประโยชน์มากเมื่อทำการดีบักหรือแก้ไขปัญหา โปรดจำไว้เสมอว่าหากคุณรวมข้อยกเว้นไว้ในข้อยกเว้นอื่น คุณต้องส่งข้อยกเว้นต้นทางเมื่อสร้างข้อยกเว้นใหม่
4) ให้ข้อมูลที่มีความหมายและครบถ้วนเกี่ยวกับข้อยกเว้นเสมอ
ข้อมูลข้อยกเว้นเป็นส่วนที่สำคัญที่สุดเนื่องจากเป็นที่แรกที่โปรแกรมเมอร์เห็น และนี่คือที่ที่คุณสามารถค้นหาสาเหตุของปัญหาได้ มีการให้ข้อมูลที่ถูกต้องและเป็นความจริงที่นี่เสมอ ตัวอย่างเช่น เปรียบเทียบข้อความข้อยกเว้นสองข้อความของข้อยกเว้น IllegalArgumentException:
ข้อความ 1: “อาร์กิวเมนต์ไม่ถูกต้องสำหรับวิธีการ”
ข้อความ 2: “มูลค่าที่ไม่ถูกต้องสำหรับ ${argument}: ${value}
ข้อความแรกระบุเพียงว่าพารามิเตอร์ไม่ถูกต้องหรือไม่ถูกต้อง แต่ข้อความที่สองมีชื่อพารามิเตอร์และค่าที่ไม่ถูกต้อง ซึ่งเป็นสิ่งสำคัญในการค้นหาสาเหตุของข้อผิดพลาด ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดของ Java นี้เสมอเมื่อเขียนโค้ดการจัดการข้อยกเว้นในการเขียนโปรแกรม Java
5) หลีกเลี่ยงการใช้ข้อยกเว้นที่ตรวจสอบมากเกินไป
ข้อยกเว้นที่ตรวจสอบมีข้อดีบางประการในการบังคับใช้การดำเนินการ แต่ยังทำลายโค้ดและทำให้อ่านโค้ดได้น้อยลงด้วยการมาสก์ตรรกะทางธุรกิจ ตราบใดที่คุณไม่ใช้ข้อยกเว้นที่ตรวจสอบมากเกินไป คุณสามารถลดสถานการณ์เหล่านี้ให้เหลือน้อยที่สุด และผลลัพธ์ที่ได้คือโค้ดที่สะอาดยิ่งขึ้น คุณยังสามารถใช้คุณสมบัติใหม่ของ Java 7 เช่น catch block หนึ่งบล็อกสำหรับข้อยกเว้นหลายรายการ และการจัดการทรัพยากรอัตโนมัติเพื่อลบรายการที่ซ้ำกัน
6) แปลงข้อยกเว้นที่ตรวจสอบแล้วให้เป็นข้อยกเว้นรันไทม์
นี่เป็นหนึ่งในเทคนิคที่ใช้ในการจำกัดการใช้ข้อยกเว้นที่ถูกตรวจสอบในเฟรมเวิร์กส่วนใหญ่ เช่น Spring นี่คือประโยชน์ที่ได้รับจากแนวทางปฏิบัติที่ดีที่สุดของ Java ข้อยกเว้นเฉพาะถูกจำกัดไว้เฉพาะโมดูลเฉพาะ เช่น SQLException ซึ่งวางอยู่ในเลเยอร์ DAO และข้อยกเว้นรันไทม์ที่มีความหมายชัดเจนจะถูกส่งไปที่เลเยอร์ไคลเอ็นต์
7) โปรดจำไว้ว่าข้อยกเว้นมีค่าใช้จ่ายสูงต่อประสิทธิภาพการทำงาน
สิ่งหนึ่งที่ต้องจำไว้คือข้อยกเว้นนั้นมีราคาแพงและทำให้โค้ดของคุณช้า หากคุณมีเมธอดที่อ่านจาก ResultSet ก็มักจะส่ง SQLException โดยไม่ย้ายไปยังองค์ประกอบถัดไป ซึ่งจะประมวลผลช้ากว่าโค้ดปกติที่ไม่ส่งข้อยกเว้นมาก ดังนั้น การจับและการเคลื่อนไหวข้อยกเว้นที่ไม่จำเป็นจึงลดลง โดยไม่มีเหตุผลที่แน่นอน แทนที่จะโยนและจับข้อยกเว้น คุณอาจได้รับโซลูชันที่สะอาดกว่าและมีประสิทธิภาพมากกว่า หากคุณสามารถใช้ตัวแปรบูลีนเพื่อแสดงผลลัพธ์การดำเนินการ แก้ไขแหล่งที่มาของข้อผิดพลาดและหลีกเลี่ยงการจับข้อยกเว้นที่ไม่จำเป็น
8) หลีกเลี่ยงไม่ให้ catch block ว่างเปล่า
ไม่มีอะไรจะเลวร้ายไปกว่า catch block ที่ว่างเปล่า เพราะไม่เพียงแต่จะซ่อนข้อผิดพลาดและข้อยกเว้นเท่านั้น แต่ยังสามารถทำให้อ็อบเจ็กต์ของคุณอยู่ในสภาพใช้ไม่ได้หรือสกปรกอีกด้วย catch block ที่ว่างเปล่าอาจไม่มีความหมายก็ต่อเมื่อคุณมั่นใจอย่างแน่นอนว่าข้อยกเว้นจะไม่ส่งผลกระทบต่อสถานะของอ็อบเจ็กต์ แต่อย่างใด แต่ข้อผิดพลาดในการบันทึกระหว่างการทำงานของโปรแกรมยังคงเป็นตัวเลือกที่ดีที่สุด นี่ไม่ใช่แค่แนวทางปฏิบัติที่ดีที่สุดของ Java แต่เป็นแนวทางปฏิบัติทั่วไปในการเขียนโค้ดการจัดการข้อยกเว้นในการเขียนโปรแกรม Java
9) ใช้ข้อยกเว้นมาตรฐาน
แนวทางปฏิบัติที่ดีที่สุดข้อที่ 9 ของเราแนะนำให้ใช้ข้อยกเว้น Java มาตรฐานและในตัว การใช้ข้อยกเว้นมาตรฐานแทนการสร้างของเราเองในแต่ละครั้งคือตัวเลือกที่ดีที่สุดสำหรับการบำรุงรักษาและความสม่ำเสมอทั้งในปัจจุบันและในอนาคต การใช้ข้อยกเว้นมาตรฐานซ้ำทำให้โค้ดสามารถอ่านได้มากขึ้น เนื่องจากนักพัฒนา Java ส่วนใหญ่คุ้นเคยกับข้อยกเว้นมาตรฐาน เช่น RuntimeException, IllegalStateException, IllegalArgumentException หรือ NullPointerException ที่มาจาก JDK และพวกเขาสามารถทราบแต่ละข้อยกเว้นได้อย่างรวดเร็ว จุดประสงค์ไม่ใช่เพื่อค้นหาผู้ใช้ ข้อยกเว้นที่กำหนดไว้ในรหัสหรือในเอกสารประกอบ
10) บันทึกข้อยกเว้นที่เกิดขึ้นโดยวิธีการใดๆ
Java จัดเตรียมคีย์เวิร์ด Throw และ Throw เพื่อทำการ Throw ข้อยกเว้น ใช้ @throw ใน javadoc เพื่อบันทึกข้อยกเว้นใด ๆ ที่อาจถูก Throw โดยวิธีใด ๆ สิ่งนี้มีความสำคัญมากหากคุณเขียน API หรืออินเทอร์เฟซสาธารณะ ข้อยกเว้นใดๆ ที่เกิดจากวิธีการควรได้รับการบันทึกไว้เพื่อให้คุณสามารถแจ้งเตือนใครก็ตามที่ใช้วิธีนั้นโดยไม่รู้ตัว เหล่านี้คือแนวทางปฏิบัติที่ดีที่สุดทั้งหมดที่ต้องปฏิบัติตามเมื่อจัดการกับข้อยกเว้นในการเขียนโปรแกรม Java แจ้งให้เราทราบว่าแนวทางปฏิบัติที่ต้องปฏิบัติตามในขณะที่เขียนโค้ดการจัดการข้อยกเว้นในการเขียนโปรแกรม Java มีอะไรบ้าง