แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

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

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

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

พื้นฐานของการเปรียบเทียบโยนพ่น
ขั้นพื้นฐานคำหลักโยนส่งมอบวัตถุข้อยกเว้นที่เราสร้างขึ้นให้กับ JVM ด้วยตนเองคีย์เวิร์ด throws ใช้เพื่อมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นให้กับผู้เรียกเมธอด
วากยสัมพันธ์โยน Throwable-instance;return_type method_name (พารามิเตอร์รายการ) พ่น ExceptionClass_list
{
// เนื้อหาของวิธีการ
}
ติดตามโดยคีย์เวิร์ด throw ตามด้วยอ็อบเจ็กต์ข้อยกเว้นคีย์เวิร์ด throws ตามด้วยรายการคลาสยกเว้นที่สามารถเกิดขึ้นได้ในเมธอด
จำนวนการโยนยกเว้นคีย์เวิร์ด throw สามารถโยนอินสแตนซ์ข้อยกเว้นเดียวได้คำหลัก throws สามารถประกาศคลาสข้อยกเว้นหลายคลาสคั่นด้วยเครื่องหมายจุลภาค

ความหมายของการโยน

คีย์เวิร์ด“ throw ” ถูกใช้เพื่อมอบอินสแตนซ์ข้อยกเว้นที่สร้างขึ้นของเราให้กับ JVM (Java Virtual Machine) ด้วยตนเอง หาก "การโยน" ไม่ได้ใช้เพื่อโยนอินสแตนซ์ข้อยกเว้นและเกิดข้อยกเว้นระบบรันไทม์จะส่งอินสแตนซ์ข้อยกเว้นไปยัง JVM ภายในและโปรแกรมจะหยุดทำงานอย่างผิดปกติ รูปแบบทั่วไปของคำสำคัญ throw คือ:

 โยน Throwable_instance; 

ด้านบน Throwable_instance จะต้องเป็นวัตถุของคลาส Throwable ประเภทดั้งเดิมเช่น int, float หรือ char และอินสแตนซ์ของคลาสที่ไม่สามารถโยนได้ไม่สามารถโยนโดยใช้คีย์เวิร์ด Throw

ให้เรายกตัวอย่างเพื่อทำความเข้าใจกับการโยนคำหลัก

 ทดสอบคลาส {โมฆะคงสาธารณะหลัก (String [] args) {โยน ArithmeticException ใหม่ ("/ by zero"); }} 

ในโค้ดข้างต้นการโยนคำหลักจะแสดงตัวอย่างของคลาสข้อยกเว้น“ ArithmeticException” หากไม่ได้ใช้คีย์เวิร์ด throw วิธี main () จะสร้างอ็อบเจ็กต์ข้อยกเว้นภายในที่ส่งมอบให้กับ JVM

คะแนนที่ต้องจำเกี่ยวกับการโยนคำหลัก:

  • มันส่งมอบอ็อบเจ็กต์ข้อยกเว้นด้วยตนเองให้กับ JVM
  • มันใช้ดีที่สุดสำหรับข้อยกเว้นที่ผู้ใช้กำหนดหรือข้อยกเว้นที่กำหนดเอง
  • หากหน่วยความจำไม่ได้ถูกจัดสรรให้กับวัตถุข้อยกเว้นที่เกิดจากการโยนคีย์เวิร์ดจะเกิดข้อยกเว้นรันไทม์นั่นคือ NullPointerException
  • คีย์เวิร์ด Throw จะหยุดการทำงานของโปรแกรมทันทีหลังจากเกิดขึ้น เราไม่สามารถเขียนคำสั่งใด ๆ ได้โดยตรงหลังจากคำสั่ง Throw หากเราเขียน staement ใด ๆ โดยตรงหลังจากโยนคำสั่งแล้วคอมไพเลอร์จะแสดงข้อผิดพลาดคำสั่งที่ไม่สามารถเข้าถึงได้ในระหว่างการรวบรวม
  • เฉพาะโยนของคลาส Throwable เท่านั้นที่สามารถโยนได้โดยใช้คีย์เวิร์ด Throw ถ้าโยนวัตถุไม่ใช่วัตถุของคลาส Throwable แล้วเราได้รับข้อผิดพลาดในการรวบรวม“ พบประเภทที่เข้ากันไม่ได้ . ต้องการ java.lang.Throwable”

บันทึก:

คีย์เวิร์ด Throw ถูกใช้ใน C ++, JAVA, C #, เพื่อทำการยกเว้นด้วยตนเอง

ความหมายของการพ่น

คีย์เวิร์ด“ throws ” ถูกใช้เพื่อมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นที่เกิดขึ้นในเมธอดให้แก่เมธอด caller เมธอดผู้โทรมีหน้าที่จัดการข้อยกเว้นซึ่งอาจเป็นวิธีอื่นหรือ JVM มันประกาศรายการของคลาสข้อยกเว้นที่อาจเกิดขึ้นในวิธีการ

การใช้คีย์เวิร์ด throws ทำให้คอมไพเลอร์ทราบว่าข้อยกเว้นที่เกิดขึ้นในเมธอดนั้นต้องถูกจัดการโดยเมธอดผู้โทรดังนั้นจะไม่มีข้อผิดพลาดในการคอมไพล์เกิดขึ้น แต่วิธีการที่ผู้เรียกต้องจัดการกับข้อยกเว้นหรือมอบหมายความรับผิดชอบในการจัดการข้อยกเว้นให้กับวิธีการลำดับชั้น เมื่อเกิดข้อยกเว้นรันไทม์แม้ว่าหลังจากใช้คีย์เวิร์ด throws จะไม่ป้องกันการยกเลิกโปรแกรมที่ผิดปกติ หากเมธอดผู้เรียกใช้เป็น main () JVM โดยดีฟอลต์จะจัดการกับข้อยกเว้น

รูปแบบทั่วไปของคำหลัก throws คือ:

 return_type method_name (พารามิเตอร์รายการ) พ่น exceptionClass_list {// เนื้อหาของวิธีการ} 

เราจะเห็นว่าคำหลัก throws ปรากฏขึ้นหลังจากลายเซ็นของวิธีการและสามารถมีรายการของคลาสยกเว้นที่อาจเกิดขึ้นในวิธีการ รายการของคลาสยกเว้นที่เขียนขึ้นหลังจากการแยกคีย์เวิร์ดถูกคั่นด้วยเครื่องหมายจุลภาค

ขอให้เรายกตัวอย่างหนึ่งตัวเพื่อทำความเข้าใจกับคำสำคัญ throws

 การทดสอบ calss {โมฆะ static public main (String [] args) พ่น InterruptedException {thread sleep (10000); }} 

ในโค้ดด้านบนเธรดหลักจะถูกทำให้หลับเป็นระยะเวลาหนึ่งโดยใช้เมธอด sleep () ตอนนี้เมื่อเมธอดหลักหยุดทำงานอาจเป็นไปได้ที่เธรดอื่นอาจขัดจังหวะเธรดหลัก แต่คีย์เวิร์ด throws ถูกใช้หลังจากลายเซ็นของเมธอด main () ดังนั้นโปรแกรมจะคอมไพล์ได้อย่างง่ายดาย คำหลัก throws กำลังประกาศคลาสข้อยกเว้นที่เลือกไว้ 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 สามารถโยนอ็อบเจกต์ exception ครั้งเดียวในขณะที่คีย์เวิร์ด Throws สามารถประกาศคลาสยกเว้นหลายคลาสคั่นด้วยเครื่องหมายคอมม่าในแต่ละครั้ง

สรุป:

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

Top