เหตุผลและสถานการณ์สำหรับการใช้ลองและในที่สุดก็ไม่ได้ใช้งาน
ในชุดเครื่องมือพร้อมกันของ JDK การจัดการข้อยกเว้นจำนวนมากใช้โครงสร้างต่อไปนี้เช่น AbstractExecutorservice นั่นคือมีเพียงลองและในที่สุดก็ไม่จับได้
Class X {Private Final Reentrantlock Lock = ใหม่ reentrantlock (); ปลดล็อก ()}}}ทำไมต้องใช้โครงสร้างนี้? ประโยชน์คืออะไร? ดูรหัสต่อไปนี้ก่อน
Public Void TreattryandFinally (ชื่อสตริง) {ลอง {name.length (); // nullpointerexception} ในที่สุด {system.out.println ("aa");ผลการดำเนินการของการส่งผ่าน null วิธีคือ: พิมพ์ AA บนคอนโซลและโยน nullpointerexception กระบวนการดำเนินการคือการดำเนินการบล็อกลองใช้งานบล็อกในที่สุดหลังจากเกิดข้อยกเว้นและในที่สุดก็โยนข้อยกเว้นในการลองไปที่ผู้โทร ผลการดำเนินการนี้เป็นเรื่องปกติมากเนื่องจากไม่มีตัวจัดการข้อยกเว้นวิธีการทั้งหมดสามารถโยนข้อยกเว้นที่สร้างออกไปด้านนอกได้ในที่สุด
ประโยชน์ของวิธีการนี้คืออะไร? สำหรับ Treattryandfinally มันจะทำในสิ่งที่ต้องทำและโยนข้อยกเว้นที่ไม่สามารถจัดการได้ กล่าวอีกนัยหนึ่งโครงสร้างนี้ตระหนักถึงการแยกความรับผิดชอบตระหนักถึงการแยกการจัดการข้อยกเว้นและการทำความสะอาดข้อยกเว้นและช่วยให้วิธีการต่าง ๆ มุ่งเน้นไปที่สิ่งที่ควรทำ ดังนั้นเมื่อใดที่จะใช้การลองครั้งสุดท้ายและเมื่อใดควรใช้ลอง-จับรอบสุดท้าย? เห็นได้ชัดว่ามันขึ้นอยู่กับว่าวิธีการเองสามารถจัดการกับข้อยกเว้นที่ปรากฏในการลองหรือไม่ หากคุณสามารถจัดการกับตัวเองได้โดยตรงโดยไม่ต้องโยนมันไปยังผู้โทรของวิธีการ . นั่นคือประกาศข้อยกเว้นที่การโยนอาจปรากฏในลายเซ็นของวิธีการและไม่สามารถจัดการได้ด้วยตัวเอง แต่ทำในสิ่งที่คุณควรทำภายในวิธีการ
สถานการณ์ที่คำสั่งสุดท้ายจะไม่ถูกดำเนินการ
สถานการณ์เดียวที่คำสั่งของ Java ในที่สุดจะไม่ถูกดำเนินการคือวิธีการ System.Exit () ที่ใช้ในการยกเลิกโปรแกรมจะถูกดำเนินการก่อน
การทดสอบระดับสาธารณะ {โมฆะสาธารณะคงที่ (สตริง [] args) {ลอง {system.out.println ("เริ่มต้น"); } system.out.println ("end");ผลลัพธ์ผลลัพธ์คือ:
เริ่ม
แน่นอนว่าหากอำนาจถูกตัดออกทันทีเมื่อดำเนินการคำสั่งลองทั่วไปโดยไม่ต้องใช้คำสั่ง system.exit () กระบวนการทั้งหมดจะสิ้นสุดลงและคำสั่งสุดท้ายจะไม่ถูกดำเนินการ