คำถาม
วันนี้ฉันพบปัญหา ในรหัสต่อไปนี้เมื่อมีการโยนข้อยกเว้นรันไทม์รหัสที่ตามมาจะยังคงดำเนินการอยู่หรือไม่? ฉันจำเป็นต้องเพิ่มคำสั่ง return หลังจากข้อยกเว้นหรือไม่?
โมฆะสาธารณะเพิ่ม (ดัชนี int, องค์ประกอบ e) {ถ้า (ขนาด> = องค์ประกอบความยาว) {โยน runtimeException ใหม่ ("ตารางคำสั่งซื้อเต็มไม่สามารถเพิ่มได้"); //กลับ; // จำเป็นหรือไม่? -
เพื่อตอบคำถามนี้ฉันเขียนรหัสสองสามชิ้นเพื่อทดสอบและผลลัพธ์มีดังนี้:
// รหัส 1Public Static Void Test () โยนข้อยกเว้น {โยนข้อยกเว้นใหม่ ("พารามิเตอร์ออกจากขอบเขต"); System.out.println ("หลังจากข้อยกเว้น"); // ข้อผิดพลาดในการรวบรวม "คำสั่งที่ไม่สามารถเข้าถึงได้"} // รหัส 2Try {โยนข้อยกเว้นใหม่ ("พารามิเตอร์ออกจากขอบเขต"); } catch (exception e) {e.printstacktrace ();} system.out.println ("หลังจากข้อยกเว้น"); // สามารถดำเนินการได้ // รหัส 3if (จริง) {โยนข้อยกเว้นใหม่ ("พารามิเตอร์ออกจากขอบเขต"); } system.out.println ("หลังจากข้อยกเว้น"); // ข้อยกเว้นถูกโยนลงไปจะไม่ถูกดำเนินการสรุป:
หากข้อยกเว้นถูกโยนลงไปก่อนที่จะมีรหัสและข้อยกเว้นไม่ถูกจับรหัสชิ้นนี้จะสร้างข้อผิดพลาดในการรวบรวมเวลา "คำสั่งที่ไม่สามารถเข้าถึงได้" เป็นรหัส 1
หากมีข้อยกเว้นถูกโยนลงไปก่อนที่จะมีรหัสชิ้นหนึ่งและข้อยกเว้นนี้ถูกจับได้โดย try...catch หากไม่มีข้อยกเว้นใหม่ถูกโยนลงในคำสั่ง catch ในเวลานี้รหัสสามารถดำเนินการได้มิฉะนั้นเช่นเดียวกับข้อ 1 เช่นรหัส 2
หากข้อยกเว้นถูกโยนลงในคำสั่งแบบมีเงื่อนไขโปรแกรมสามารถรวบรวมได้ แต่ข้อความที่ตามมาจะไม่ถูกดำเนินการ เป็นรหัส 3
สรุปความแตกต่างระหว่างข้อยกเว้นรันไทม์และข้อยกเว้นที่ไม่ใช่ตามกฎหมาย:
ข้อยกเว้นรันไทม์เป็นข้อยกเว้นของคลาส RuntimeException และคลาสย่อยของมันและเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบเช่น NullPointerException , IndexOutOfBoundsException ฯลฯ เนื่องจากข้อยกเว้นดังกล่าวเป็นข้อยกเว้นของระบบและไม่สามารถจัดการได้เช่นปัญหาเครือข่าย
ไม่ว่าจะเป็นข้อผิดพลาดลอจิกของโปรแกรมเช่นข้อยกเว้นตัวชี้โมฆะ JVM จะต้องหยุดทำงานเพื่อแก้ไขข้อผิดพลาดนี้ดังนั้นข้อยกเว้นรันไทม์สามารถจัดการได้โดยไม่ต้องประมวลผล (การจับหรือการขว้างแน่นอนมันสามารถจัดการได้) และ JVM จัดการกับมันเอง Java Runtime จะ catch RuntimeException โดยอัตโนมัติของ throw โปรแกรมจากนั้นหยุดเธรดและพิมพ์ข้อยกเว้น
ข้อยกเว้นที่ไม่ใช่ตามกฎหมายเป็นข้อยกเว้นนอกเหนือจาก RuntimeException พวกเขาทั้งหมดเป็นของคลาส Exception และคลาสย่อยของมันและมีการตรวจสอบข้อยกเว้น ข้อยกเว้นที่ไม่ใช่ตามกฎหมายจะต้องดำเนินการ (การจับหรือการขว้าง) และหากไม่ได้ดำเนินการโปรแกรมจะมีข้อผิดพลาดในการรวบรวม โดยทั่วไปแล้ว Exception ที่เขียนไว้ใน API ที่ throws ไม่ใช่ RuntimeException
ข้อยกเว้นรันไทม์ทั่วไป:
ข้อยกเว้นที่ไม่ใช่ตามกฎหมายทั่วไป:
โอเคข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร