ความแตกต่างระหว่างการโยนและการโยนใน Java
เนื้อหา
การขว้างปาและโยนเป็นคำหลักที่ใช้ในการจัดการข้อยกเว้น โยน คีย์เวิร์ดถูกใช้เพื่อส่งมอบอินสแตนซ์ของข้อยกเว้นที่สร้างโดยโปรแกรมเมอร์ไปยัง JVM ด้วยตนเอง พ่น คำสำคัญที่ใช้ในการส่งมอบความรับผิดชอบในการจัดการข้อยกเว้นที่เกิดขึ้นในวิธีการวิธีการโทร ความแตกต่างพื้นฐานระหว่างการขว้างปาและการขว้างปาคือว่าคีย์เวิร์ด Throw ใช้อ็อบเจ็กต์ข้อยกเว้นในขณะที่คีย์เวิร์ด Throws ใช้ชื่อของคลาสยกเว้น
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานของการเปรียบเทียบ | โยน | พ่น |
---|---|---|
ขั้นพื้นฐาน | คำหลักโยนส่งมอบวัตถุข้อยกเว้นที่เราสร้างขึ้นเพื่อ JVM ด้วยตนเอง | คีย์เวิร์ด throws ใช้เพื่อมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นให้กับผู้เรียกเมธอด |
วากยสัมพันธ์ | โยน Throwable- ตัวอย่าง; | return_type method_name (พารามิเตอร์รายการ) พ่น ExceptionClass_list { // เนื้อหาของวิธีการ } |
ติดตามโดย | คีย์เวิร์ด throw ตามด้วยอ็อบเจ็กต์ข้อยกเว้น | คีย์เวิร์ด throws ตามด้วยรายการคลาสยกเว้นที่สามารถเกิดขึ้นได้ในเมธอด |
จำนวนข้อยกเว้นที่ถูกส่งออกไป | คีย์เวิร์ด throw สามารถโยนอินสแตนซ์ข้อยกเว้นเดียวได้ | คำหลัก throws สามารถประกาศคลาสข้อยกเว้นหลายคลาสคั่นด้วยเครื่องหมายจุลภาค |
ความหมายของการโยน
คำหลัก“โยน” ใช้เพื่อส่งมอบอินสแตนซ์ข้อยกเว้นที่สร้างขึ้นให้กับ JVM (Java Virtual Machine) ด้วยตนเอง หาก "การโยน" ไม่ได้ใช้เพื่อโยนอินสแตนซ์ข้อยกเว้นและเกิดข้อยกเว้นระบบรันไทม์จะส่งอินสแตนซ์ข้อยกเว้นไปยัง JVM ภายในและโปรแกรมจะหยุดทำงานอย่างผิดปกติ รูปแบบทั่วไปของคำสำคัญ throw คือ:
โยน Throwable_instance;
ด้านบน Throwable_instance จะต้องเป็นวัตถุของคลาส Throwable ประเภทดั้งเดิมเช่น int, float หรือ char และอินสแตนซ์ของคลาสที่ไม่สามารถโยนได้ไม่สามารถโยนโดยใช้คีย์เวิร์ด Throw
ให้เรายกตัวอย่างเพื่อทำความเข้าใจเกี่ยวกับการโยนคำหลัก
การทดสอบระดับ {หลักคงที่เป็นโมฆะสาธารณะหลัก (สตริง args) {โยน ArithmeticException ใหม่ ("/ โดยศูนย์"); }}
ในรหัสข้างต้นการโยนคำหลักจะแสดงตัวอย่างของคลาสข้อยกเว้น“ ArithmeticException” หากไม่ได้ใช้คีย์เวิร์ด throw วิธี main () จะสร้างอ็อบเจ็กต์ข้อยกเว้นภายในที่ส่งมอบให้กับ JVM
จุดที่ต้องจำเกี่ยวกับการโยนคำหลัก:
- มันส่งมอบอ็อบเจ็กต์ข้อยกเว้นด้วยตนเองให้กับ JVM
- มันถูกใช้ดีที่สุดสำหรับข้อยกเว้นที่ผู้ใช้กำหนดหรือข้อยกเว้นที่กำหนดเอง
- หากหน่วยความจำไม่ได้ถูกจัดสรรให้กับวัตถุข้อยกเว้นที่เกิดจากการโยนคีย์เวิร์ดดังนั้นจะเกิดข้อยกเว้นรันไทม์ NullPointerException
- คีย์เวิร์ด Throw จะหยุดการทำงานของโปรแกรมทันทีหลังจากเกิดขึ้น เราไม่สามารถเขียนคำสั่งใด ๆ โดยตรงหลังจากคำสั่ง Throw หากเราเขียน staement ใด ๆ โดยตรงหลังจากโยนคำสั่งแล้วคอมไพเลอร์จะแสดงข้อผิดพลาดคำสั่งที่ไม่สามารถเข้าถึงได้ในระหว่างการรวบรวม
- มีเพียงโยนวัตถุของคลาส Throwable โดยใช้คีย์เวิร์ด Throw ถ้าโยนวัตถุไม่ใช่วัตถุของคลาส Throwable แล้วเราได้รับข้อผิดพลาดในการรวบรวม“ พบประเภทที่เข้ากันไม่ได้ . ต้องการ java.lang.Throwable”
บันทึก:
คีย์เวิร์ด Throw ถูกใช้ใน C ++, JAVA, C #, เพื่อทำการยกเว้นด้วยตนเอง
ความหมายของการพ่น
“พ่นคำสำคัญ” ใช้เพื่อมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นที่เกิดขึ้นในวิธีการกับวิธีการโทร เมธอดผู้โทรมีหน้าที่จัดการข้อยกเว้นซึ่งอาจเป็นวิธีอื่นหรือ JVM มันประกาศรายการของคลาสข้อยกเว้นที่อาจเกิดขึ้นในวิธีการ
การใช้คีย์เวิร์ด throws ทำให้คอมไพเลอร์ทราบว่าข้อยกเว้นที่เกิดขึ้นในเมธอดนั้นต้องถูกจัดการโดยเมธอดผู้โทรดังนั้นจะไม่มีข้อผิดพลาดในการคอมไพล์เกิดขึ้น แต่วิธีการที่ผู้เรียกต้องจัดการกับข้อยกเว้นหรือมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นกับวิธีการลำดับชั้น เมื่อเกิดข้อยกเว้นรันไทม์แม้ว่าหลังจากใช้คีย์เวิร์ด throws จะไม่ป้องกันการยกเลิกโปรแกรมที่ผิดปกติ หากเมธอดผู้โทรเป็น main () JVM โดยดีฟอลต์จะจัดการกับข้อยกเว้น
รูปแบบทั่วไปของคำหลัก throws คือ:
return_type method_name (พารามิเตอร์รายการ) พ่น exceptionClass_list {// เนื้อหาของวิธีการ}
เราจะเห็นว่าคำหลัก throws ปรากฏขึ้นหลังจากลายเซ็นของวิธีการและสามารถมีรายการของคลาสยกเว้นที่อาจเกิดขึ้นในวิธีการ รายการของคลาสยกเว้นที่เขียนหลังจากการแยกคีย์เวิร์ดถูกคั่นด้วยเครื่องหมายจุลภาค
ขอให้เรายกตัวอย่างหนึ่งตัวเพื่อทำความเข้าใจคำสำคัญที่ใช้พ่น
การทดสอบ calss {โมฆะสาธารณะคงที่ main (String args) พ่น InterruptedException {thread sleep (10000); }}
ในโค้ดด้านบนเธรดหลักถูกสร้างขึ้นเพื่อ sleep ในบางครั้งโดยใช้เมธอด sleep () ตอนนี้เมื่อเมธอดหลักหยุดทำงานอาจเป็นไปได้ที่เธรดอื่นอาจขัดจังหวะเธรดหลัก แต่คีย์เวิร์ด throws ถูกใช้หลังจากลายเซ็นของเมธอด main () ดังนั้นโปรแกรมจะคอมไพล์ได้อย่างง่ายดาย คำหลักที่พ่นจะประกาศคลาสยกเว้นที่ตรวจสอบแล้ว InterruptedException ตอนนี้หากเธรดอื่น ๆ ขัดจังหวะเธรดหลักระหว่างรันไทม์คีย์เวิร์ด throws จะส่งข้อยกเว้นนั้นให้กับผู้เรียกเมธอด main () ซึ่งคือ JVM JVM จะยุติโปรแกรมอย่างผิดปกติ
จุดที่ต้องจำเกี่ยวกับการโยนคำหลัก:
- คีย์เวิร์ด throws ใช้สำหรับประกาศคลาสยกเว้นที่เลือก การใช้คำหลัก throws สำหรับข้อยกเว้นที่ไม่ถูกตรวจสอบจะไม่มีผลกระทบใด ๆ
- ถ้าวิธีการไม่ต้องการจัดการข้อยกเว้นด้วยตนเองมันจะมอบหมายข้อยกเว้นนั้นให้กับวิธีการเรียกของคลาสนั้นโดยใช้คีย์เวิร์ด throws
- การใช้งานเฉพาะช่วยให้การรวบรวมเรียบของโปรแกรม
- หากมีข้อผิดพลาดเกิดขึ้นขณะทำงานโปรแกรมจะหยุดทำงานอย่างผิดปกติแม้หลังจากการใช้งานคีย์เวิร์ด throws
- ขอแนะนำให้ใช้ try / catch block สำหรับการยกเลิกปกติของโปรแกรมหากเกิดข้อยกเว้นที่ runtime
บันทึก:
คีย์เวิร์ด throws ใช้ใน Java เท่านั้น C ++ และ C # ห้ามใช้คำสำคัญ throws
- คีย์เวิร์ด throw, ส่งมอบความรับผิดชอบของการจัดการข้อยกเว้นไปยัง JVM ด้วยตนเองในขณะที่คีย์เวิร์ด throw, ส่งมอบความรับผิดชอบของการจัดการข้อยกเว้นไปยังเมธอด caller ของโค้ดที่เกิดข้อยกเว้น
- คีย์เวิร์ด throw ตามด้วยอ็อบเจ็กต์ข้อยกเว้นที่ส่งมอบให้กับ JVM ในทางตรงกันข้าม throws คำหลักตามด้วยคลาสยกเว้นที่สามารถเกิดขึ้นได้ในวิธีการ
- คีย์เวิร์ด Throw สามารถโยนอ็อบเจกต์ข้อยกเว้นทีละตัวในขณะที่คีย์เวิร์ด Throws สามารถประกาศคลาสข้อยกเว้นหลายคลาสที่คั่นด้วยเครื่องหมายคอมม่าในแต่ละครั้ง
สรุป:
คีย์เวิร์ด Throw ใช้ดีที่สุดสำหรับข้อยกเว้นที่กำหนดเอง บล็อก try / catch เหมาะสมที่สุดสำหรับการจัดการข้อยกเว้นเมื่อเปรียบเทียบกับคีย์เวิร์ด throws