ความแตกต่างระหว่างการโยนและการโยนใน Java

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 15 พฤษภาคม 2024
Anonim
When to use throws keyword in JAVA || Try Catch vs Throws || Exception handling in java
วิดีโอ: When to use throws keyword in JAVA || Try Catch vs Throws || Exception handling in java

เนื้อหา


การขว้างปาและโยนเป็นคำหลักที่ใช้ในการจัดการข้อยกเว้น โยน คีย์เวิร์ดถูกใช้เพื่อส่งมอบอินสแตนซ์ของข้อยกเว้นที่สร้างโดยโปรแกรมเมอร์ไปยัง JVM ด้วยตนเอง พ่น คำสำคัญที่ใช้ในการส่งมอบความรับผิดชอบในการจัดการข้อยกเว้นที่เกิดขึ้นในวิธีการวิธีการโทร ความแตกต่างพื้นฐานระหว่างการขว้างปาและการขว้างปาคือว่าคีย์เวิร์ด Throw ใช้อ็อบเจ็กต์ข้อยกเว้นในขณะที่คีย์เวิร์ด Throws ใช้ชื่อของคลาสยกเว้น

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานของการเปรียบเทียบโยนพ่น
ขั้นพื้นฐานคำหลักโยนส่งมอบวัตถุข้อยกเว้นที่เราสร้างขึ้นเพื่อ 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

  1. คีย์เวิร์ด throw, ส่งมอบความรับผิดชอบของการจัดการข้อยกเว้นไปยัง JVM ด้วยตนเองในขณะที่คีย์เวิร์ด throw, ส่งมอบความรับผิดชอบของการจัดการข้อยกเว้นไปยังเมธอด caller ของโค้ดที่เกิดข้อยกเว้น
  2. คีย์เวิร์ด throw ตามด้วยอ็อบเจ็กต์ข้อยกเว้นที่ส่งมอบให้กับ JVM ในทางตรงกันข้าม throws คำหลักตามด้วยคลาสยกเว้นที่สามารถเกิดขึ้นได้ในวิธีการ
  3. คีย์เวิร์ด Throw สามารถโยนอ็อบเจกต์ข้อยกเว้นทีละตัวในขณะที่คีย์เวิร์ด Throws สามารถประกาศคลาสข้อยกเว้นหลายคลาสที่คั่นด้วยเครื่องหมายคอมม่าในแต่ละครั้ง

สรุป:

คีย์เวิร์ด Throw ใช้ดีที่สุดสำหรับข้อยกเว้นที่กำหนดเอง บล็อก try / catch เหมาะสมที่สุดสำหรับการจัดการข้อยกเว้นเมื่อเปรียบเทียบกับคีย์เวิร์ด throws