Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะโยนข้อยกเว้นจากบล็อกสแตติกใน Java ได้อย่างไร


บล็อกคงที่ เป็นชุดของคำสั่งซึ่งจะถูกดำเนินการโดย JVM ก่อนดำเนินการของเมธอด main() ในขณะที่กำลังโหลดชั้นเรียน หากเราต้องการทำกิจกรรมใดๆ เราต้องกำหนดกิจกรรมนั้นภายในบล็อกแบบคงที่ เพราะบล็อกนี้ทำงานที่เวลาที่โหลดคลาส .

โยนข้อยกเว้นจาก Static Block

  • A บล็อกคงที่ สามารถโยนเฉพาะ RunTimeException หรือควรจะมี try and catch block เพื่อตรวจจับ ตรวจสอบข้อยกเว้น
  • A บล็อกคงที่ เกิดขึ้นเมื่อโหลดคลาสโดยตัวโหลดคลาส รหัสสามารถมาในรูปแบบของ บล็อกแบบคงที่ หรือเป็นการเรียกเมธอดแบบสแตติกเพื่อเริ่มต้นสมาชิกข้อมูลสแตติก
  • ในทั้งสองกรณี ตรวจสอบข้อยกเว้น ไม่ได้รับอนุญาตโดยคอมไพเลอร์ เมื่อ ไม่ได้ตรวจสอบข้อยกเว้น เกิดขึ้น มันถูกปิดโดย ExceptionInitializerError ซึ่งจะถูกโยนในบริบทของเธรดที่ทริกเกอร์การโหลดคลาส
  • พยายามโยนข้อยกเว้นที่เลือกจากบล็อกแบบคงที่ ก็เป็นไปไม่ได้เช่นกัน เราสามารถมี try and catch block ในบล็อกสแตติกที่อาจมีการตรวจสอบข้อยกเว้นจากบล็อก try แต่เราต้องแก้ไขภายในบล็อก catch เราไม่สามารถเผยแพร่ต่อไปได้โดยใช้คีย์เวิร์ด throw

ตัวอย่าง

<ก่อนหน้า>คลาสสาธารณะ StaticBlockException { สแตติก int i, j; คงที่ { System.out.println ("ในบล็อกคงที่"); ลอง { ผม =0; เจ =10/ผม; } catch(ข้อยกเว้น e){ System.out.println("ข้อยกเว้นขณะเริ่มต้น" + e.getMessage()); โยนใหม่ RuntimeException(e.getMessage()); } } โมฆะคงที่สาธารณะหลัก (สตริง args []) { StaticBlockException sbe =ใหม่ StaticBlockException (); System.out.println("ในเมธอด main()"); System.out.println("ค่าของ i คือ :"+i); System.out.println("ค่าของ j คือ :"+ j); }}

ผลลัพธ์

ใน blockException แบบคงที่ขณะเริ่มต้น/ โดย zeroException ในเธรด "main" java.lang.ExceptionInitializerError เกิดจาก:java.lang.RuntimeException:/ โดยศูนย์ที่ StaticBlockException. (StaticBlockException.java:10)