logo

חריגים משורשרים בג'אווה

חריגים משורשרים ב-Java מאפשרים לשייך חריג אחד לאחר, כלומר חריג אחד מתאר את הסיבה לחריגה אחרת.

  • למשל, לשקול מצב שבו שיטה זורקת ArithmeticException בגלל ניסיון לחלק באפס.
  • אבל הסיבה העיקרית לשגיאה הייתה כשל ב-I/O שגרם למחלק להיות אפס.
  • במקרים כאלה חריגים משורשרים עוזרים להפיץ הן את הגורמים העיקריים והן הבסיסיים לשגיאה.

דוּגמָה : הדוגמה הבאה מדגימה כיצד להשתמש בחריגים משורשרים ב-Java.

Java
// Working of chained exceptions public class Geeks {  public static void main(String[] args) {  try {    // Creating an exception  NumberFormatException ex = new NumberFormatException('Primary Exception');  // Setting the cause of the exception  ex.initCause(new NullPointerException('Root cause of the exception'));  // Throwing the exception with a cause  throw ex;  }   catch (NumberFormatException ex) {    // Displaying the primary exception  System.out.println('Caught Exception: ' + ex);  // Displaying the root cause of the exception  System.out.println('Cause of Exception: ' + ex.getCause());  }  } } 

תְפוּקָה
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

פֶּתֶק: חריגים משורשרים הידועים גם כחריגים מקוננים מאפשרים לנו לשייך סיבה לחריגה ב-Java. זה שימושי כאשר אנו רוצים להפיץ מידע על הסיבה המקורית לחריגה.



בונים

  • ניתן לזרוק (גורם שניתן לזרוק) : כאשר סיבה היא החריג שגורם לחריג הנוכחי.
  • ניתנת לזריקה (מסיבת מחרוזת ניתנת לזריקה) : כאשר msg היא הודעת החריגה והגורם הוא החריג שגורם לחריג הנוכחי.

שיטות לזרוק חריגים משורשרים

  1. getCause() : שיטה זו מחזירה את הסיבה האמיתית לחריגה.
  2. initCause (גורם שניתן לזרוק) : שיטה זו מגדירה את הסיבה לחריג הקורא.

דוּגמָה: שימוש בהודעה מותאמת אישית עם חריגים משורשרים

בג'אווה אנו יכולים לשרשר חריגים באמצעות הבנאי של המחלקה Throwable.

Java
// Use a custom message with chained exception public class Geeks {  public static void main(String[] args) {  try {    // Code that might throw an exception  int[] n = new int[5];  int divisor = 0;  for (int i = 0; i < n.length; i++) {  int res = n[i] / divisor;  System.out.println(res);  }  }   catch (ArithmeticException e) {    // Creating a new exception with   // the original as the cause  throw new RuntimeException  ('Error: Division by zero occurred' e);  }  } } 

תְפוּקָה:

רקע מחיקת gimp
תְפוּקָה' title=

הֶסבֵּר: בדוגמה זו מערך של מספרים שלמים ומגדיר את המחלק ל-0.

  • בתוך הבלוק try הוא מנסה לחלק כל אלמנט של המערך ב-0 מה שזורק ArithmeticException.
  • ArithmeticException זה נתפס בבלוק ה-catch שבו נוצר RuntimeException חדש עם החריג המקורי כלומר ArithmeticException כגורם שלו.
  • מכיוון שלא נתפס ה-RuntimeException שמציג את מעקב המחסנית כולל ה-RuntimeException וה-ArithmeticException.

היתרונות של חריגים משורשרים:

היתרונות של חריגים משורשרים מפורטים להלן:

  • חריג זה מסייע באיתור באגים על ידי מתן פרטים על הסיבות העיקריות והשורשיות כאחד.
  • זה מפשט את הטיפול בשגיאות על ידי הפעלת ההפצה של הקשר חריג שלם.
  • זה משפר את המעקב אחר שגיאות ביישומים מורכבים.

החסרונות של חריגים משורשרים:

  • אם לא משתמשים בו כראוי זה יכול להפוך את מעקב הערימה ארוך יותר וקשה יותר לקריאה.
  • שימוש יתר עלול לגרום להודעות שגיאה מבלבלות אם חריגים משורשרים שלא לצורך.
  • על המפתחים להבטיח קשר בין סיבות משמעותיות; אחרת זה יכול להטעות במהלך איתור באגים.