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

1. סקירה כללית

במאמר זה, נבחן בקצרה מאוד מה יוצא מן הכלל הוא ועיין לעומק בדיון על החריגים השרשוריים ב- Java.

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

2. חריגים משורשרים

כָּבוּל יוצא מן הכלל מסייע בזיהוי מצב בו חריג אחד גורם לאחר יוצא מן הכלל ביישום.

לדוגמה, שקול שיטה שזורקת חישוב חשבון בגלל ניסיון לחלק באפס אך הסיבה החריגה בפועל הייתה שגיאת קלט / פלט שגרמה למחלק להיות אפס. השיטה תזרוק את חישוב חשבון למתקשר. המתקשר לא ידע על הגורם האמיתי לתופעה יוצא מן הכלל. כָּבוּל יוצא מן הכלל משמש במצבים כאלה.

רעיון זה הוצג ב- JDK 1.4.

בואו נראה כיצד תומכים בחריגים משורשרים בג'אווה.

3. זורק מעמד

זורק בכיתה יש כמה בונים ושיטות לתמיכה בחריגים משורשרים. ראשית, בואו נסתכל על הבונים.

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

לאחר מכן, בואו נסתכל על השיטות שהשיעור הזה מספק:

  • getCause () שיטה - שיטה זו מחזירה את הגורם הממשי המשויך לזרם יוצא מן הכלל.
  • initCause () שיטה - זה קובע סיבה בסיסית עם הפעלת יוצא מן הכלל.

4. דוגמא

עכשיו, בואו נסתכל על הדוגמה שבה נקבע משלנו יוצא מן הכלל תיאור והשליך שרשרת יוצא מן הכלל:

מחלקה ציבורית MyChainedException {public void main (String [] args) {try {throw new ArithmeticException ("Exception Top Level.") .initCause (IOException new ("IO cause.")); } לתפוס (ArithmeticException ae) {System.out.println ("נתפס:" + ae); System.out.println ("סיבה בפועל:" + ae.getCause ()); }}}

כפי שניחש, זה יוביל ל:

נתפס: java.lang.ArithmeticException: חריג ברמה העליונה. סיבה בפועל: java.io.IO יוצא מן הכלל: גורם IO.

5. מדוע חריגים משורשרים?

עלינו לשרשר את החריגים בכדי להפוך יומנים לקריאים. בואו נכתוב שתי דוגמאות. ראשית מבלי לשרשר את החריגים ושנית, עם חריגים משורשרים. בהמשך נשווה את אופן התנהלות היומנים בשני המקרים.

כדי להתחיל, ניצור סדרה של חריגים:

class NoLeaveGrantedException מרחיב חריג {public NoLeaveGrantedException (הודעת מחרוזת, סיבה הניתנת לזריקה) {super (הודעה, סיבה); } NoLeaveGrantedException ציבורי (הודעת מחרוזת) {super (הודעה); }} מחלקה TeamLeadUpsetException מרחיב חריג {// שני הבונים}

עכשיו, נתחיל להשתמש בחריגים לעיל בדוגמאות קוד.

5.1. ללא שרשור

בואו נכתוב תוכנית לדוגמא מבלי לשרשר את החריגים המותאמים אישית שלנו.

class class MainClass {public void main (String [] args) זורק Exception {getLeave (); } בטל getLeave () זורק NoLeaveGrantedException {נסה {howIsTeamLead (); } לתפוס (TeamLeadUpsetException e) {e.printStackTrace (); לזרוק NoLeaveGrantedException חדש ("השאר לא מאושר."); }} בטל howIsTeamLead () זורק TeamLeadUpsetException {לזרוק TeamLeadUpsetException חדש ("הצעת צוות מובילה"); }}

בדוגמה לעיל, יומני יראו כך:

com.baeldung.chainedexception.exceptions.TeamLeadUpsetException: Lead team Upset at com.baeldung.chainedexception.exceptions.MainClass .howIsTeamLead (MainClass.java:46) at com.baeldung.chainedexception.exceptions.MainClass .getLeave (MainClass.java34) ) ב com.baeldung.chainedexception.exceptions.MainClass .main (MainClass.java:29) חריג בשרשור "ראשי" com.baeldung.chainedexception.exceptions. NoLeaveGrantedException: השאר לא מאושר. ב com.baeldung.chainedexception.exceptions.MainClass .getLeave (MainClass.java:37) ב com.baeldung.chainedexception.exceptions.MainClass .main (MainClass.java:29)

5.2. עם שרשרת

לאחר מכן, בואו נכתוב דוגמה עם שרשור החריגים המותאמים אישית שלנו:

class class MainClass {public void main (String [] args) זורק Exception {getLeave (); } ציבורי getLeave () זורק NoLeaveGrantedException {נסה {howIsTeamLead (); } לתפוס (TeamLeadUpsetException e) {לזרוק NoLeaveGrantedException חדש ("השאר לא מאושר.", e); }} חלל ציבורי howIsTeamLead () זורק TeamLeadUpsetException {לזרוק TeamLeadUpsetException חדש ("להוביל צוות להתרגז."); }}

לבסוף, בואו נסתכל על היומנים שהושגו למעט חריגים משורשרים:

חריג בשרשור "ראשי" com.baeldung.chainedexception.exceptions .NoLeaveGrantedException: השאר לא סנקציה. ב- com.baeldung.chainedexception.exceptions.MainClass .getLeave (MainClass.java:36) ב- com.baeldung.chainedexception.exceptions.MainClass .main (MainClass.java:29) נגרמת על ידי: com.baeldung.chainedexception.exceptions .TeamLeadUpsetException : הובלת צוות מוטרדת. באתר com.baeldung.chainedexception.exceptions.MainClass .howIsTeamLead (MainClass.java:44) ב- com.baeldung.chainedexception.exceptions.MainClass .getLeave (MainClass.java:34) ... 1 עוד

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

במאמר זה, הסתכלנו על מושג החריגים השרשור.

ניתן למצוא את היישום של כל הדוגמאות בפרויקט Github - זהו פרויקט מבוסס Maven, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found