บทความนี้วิเคราะห์กลไกข้อยกเว้นของ Java พร้อมตัวอย่างและแบ่งปันกับทุกคนเพื่อเป็นข้อมูลอ้างอิง ฉันเชื่อว่ามันจะช่วยคุณปรับปรุงความสามารถในการจัดการข้อยกเว้นของโปรแกรม Java การวิเคราะห์เฉพาะมีดังนี้:
ดังที่เราทุกคนรู้ดีว่ากลไกข้อยกเว้น (Exception) ใน Java มีความสำคัญมาก โปรแกรมจะสร้างข้อผิดพลาดอย่างหลีกเลี่ยงไม่ได้ กลไกข้อยกเว้นสามารถจับข้อผิดพลาดในโปรแกรมและปรับปรุงความเสถียรและความทนทานของโปรแกรม
ข้อยกเว้นใน Java แบ่งออกเป็น Checked Exception (Non-Runtime Exception) และ UnChecked Exception (Runtime Exception) คลาสข้อยกเว้นทั้งหมดสืบทอดข้อยกเว้นโดยตรงหรือโดยอ้อม ข้อยกเว้นสืบทอดโดยตรงจากคลาส Throwable คลาสย่อยโดยตรงของคลาส Throwable ยังรวมถึงคลาสข้อผิดพลาดด้วย อย่างไรก็ตาม เมื่อมีข้อผิดพลาดเกิดขึ้น โปรแกรมจะออกจากการดำเนินการโดยตรง ดังนั้นโฟกัสจึงอยู่ที่คลาสข้อยกเว้นที่นี่ . คลาส RuntimeException สืบทอดมาจากข้อยกเว้น และข้อยกเว้นรันไทม์นั้นสืบทอดโดยตรงหรือโดยอ้อมจากคลาส RuntimeException ข้อยกเว้นอื่นๆ ที่สืบทอดมาจากคลาส Exception นั้นเป็นข้อยกเว้นที่ไม่ใช่รันไทม์ซึ่งสามารถค้นพบได้ในระหว่างการคอมไพล์ ข้อยกเว้นรันไทม์จะเกิดขึ้นที่รันไทม์เท่านั้น ตัวอย่างเช่น การหารเลขคณิตด้วยศูนย์สามารถผ่านไปได้ในระหว่างการคอมไพล์ แต่ข้อยกเว้นรันไทม์จะถูกส่งออกไปที่รันไทม์ และตัวหารไม่สามารถเป็นศูนย์ได้
การจัดการข้อยกเว้นใน Java มีสองประเภท
1. การจับข้อยกเว้น
โครงสร้างมีดังนี้
ลอง{//เรียกใช้โค้ดที่อาจสร้างข้อยกเว้น}catch(RuntimeException e){//ประมวลผลข้อยกเว้นที่ตรวจพบ}catch(ข้อยกเว้น e)//สามารถกำหนดข้อยกเว้นได้หลายรายการเพื่อตรวจจับ{//ประมวลผลข้อยกเว้นที่บันทึกไว้}ในที่สุด {//The รหัสที่จะดำเนินการหลังจากการจับภาพเป็นทางเลือก ถ้ามี ก็จะถูกดำเนินการโดยไม่คำนึงถึงว่ามีข้อยกเว้นหรือไม่} ลองจับในที่สุด
หากจับข้อยกเว้นด้วย catch หากมีคำสั่ง catch ในภายหลัง ก็จะไม่ถูกดำเนินการ อย่างไรก็ตาม หากมีการบล็อกในที่สุด คำสั่งในบล็อกสุดท้ายจะถูกดำเนินการอย่างแน่นอน
2. ประกาศข้อยกเว้น
ThrowsException ถูกประกาศในการประกาศเมธอด โดยที่เมธอดที่สร้างข้อยกเว้นถูกเรียก เมธอดนี้จะไม่จัดการกับข้อยกเว้นประเภทนี้ แต่จะถูกจัดการโดยผู้เรียกเมธอด
3. การโยนข้อยกเว้นโดยไม่ตั้งใจ
โยนข้อยกเว้นโดยตรงภายในวิธีการ โยนข้อยกเว้น;
ไม่แนะนำให้จัดการกับข้อยกเว้นรันไทม์
ข้อยกเว้นแบบกำหนดเองจะกำหนดคลาสย่อยที่สืบทอดมาจากคลาส Exception โดยทั่วไปจะไม่กำหนดคลาสย่อยที่สืบทอดมาจากคลาส RuntimeException เมื่อมีคำสั่ง return ใน try block หากมีคำสั่ง block ในที่สุด คำสั่งก็จะเข้ามา บล็อกสุดท้ายจะต้องดำเนินการก่อน Return อีกครั้ง แต่หากมีคำสั่ง System.exit(0) ในบล็อก try คำสั่งของบล็อกสุดท้ายจะไม่ถูกดำเนินการ เนื่องจาก System.exit(0) จะยุติการทำงานในปัจจุบัน ใช้งานเครื่องเสมือน Java และโปรแกรมจะสิ้นสุดก่อนที่เครื่องเสมือนจะยุติการใช้งาน
คลาส myException ขยายข้อยกเว้น { myException สาธารณะ (String str) { super (str); }} myException
ข้อยกเว้นใช้ในการประมวลผลไฟล์ แอปพลิเคชันสตรีมอินพุตและเอาท์พุต ฯลฯ
ประเภทข้อยกเว้นทั่วไป ได้แก่:
1. java.lang.NullPointerException: ข้อยกเว้นตัวชี้ Null เหตุผลสำหรับข้อยกเว้นนี้คือการอ้างอิงเป็นโมฆะ แต่มีการเรียกใช้วิธีการอ้างอิงในโปรแกรม
2. java.lang.ClassNotFoundException: ไม่พบคลาสที่ระบุ คลาสอาจไม่ได้กำหนด
3. java.lang.ArithmeticException: ข้อยกเว้นทางคณิตศาสตร์ เช่น การหารด้วยศูนย์
4. FileNotFoundException: ในระหว่างการประมวลผลไฟล์ ไม่พบไฟล์ที่ระบุ
5. IOException: ข้อยกเว้นสตรีมอินพุตและเอาท์พุต
6. SQLException: ข้อยกเว้น sql เกิดข้อผิดพลาดขณะดำเนินการคำสั่ง sql
นอกจากนี้ ยังมีข้อยกเว้นอีกหลายประเภทที่จะพบได้ในการเขียนโปรแกรมในอนาคต ฉันเชื่อว่าสิ่งที่อธิบายไว้ในบทความนี้มีค่าอ้างอิงที่แน่นอนสำหรับการเขียนโปรแกรม Java ของทุกคน