חריגים משורשרים ב-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 היא הודעת החריגה והגורם הוא החריג שגורם לחריג הנוכחי.
שיטות לזרוק חריגים משורשרים
- getCause() : שיטה זו מחזירה את הסיבה האמיתית לחריגה.
- 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
הֶסבֵּר: בדוגמה זו מערך של מספרים שלמים ומגדיר את המחלק ל-0.
- בתוך הבלוק try הוא מנסה לחלק כל אלמנט של המערך ב-0 מה שזורק ArithmeticException.
- ArithmeticException זה נתפס בבלוק ה-catch שבו נוצר RuntimeException חדש עם החריג המקורי כלומר ArithmeticException כגורם שלו.
- מכיוון שלא נתפס ה-RuntimeException שמציג את מעקב המחסנית כולל ה-RuntimeException וה-ArithmeticException.
היתרונות של חריגים משורשרים:
היתרונות של חריגים משורשרים מפורטים להלן:
- חריג זה מסייע באיתור באגים על ידי מתן פרטים על הסיבות העיקריות והשורשיות כאחד.
- זה מפשט את הטיפול בשגיאות על ידי הפעלת ההפצה של הקשר חריג שלם.
- זה משפר את המעקב אחר שגיאות ביישומים מורכבים.
החסרונות של חריגים משורשרים:
- אם לא משתמשים בו כראוי זה יכול להפוך את מעקב הערימה ארוך יותר וקשה יותר לקריאה.
- שימוש יתר עלול לגרום להודעות שגיאה מבלבלות אם חריגים משורשרים שלא לצורך.
- על המפתחים להבטיח קשר בין סיבות משמעותיות; אחרת זה יכול להטעות במהלך איתור באגים.