Java/בדיקת שגיאות: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
אין תקציר עריכה
שורה 14:
 
=== מזה חריג? ===
'''חריג''' (או ''exceptions'') הוא אירוע המתרחש במהלך הביצוע של תכנית שמפריעה לזרימה התקינה של הוראות.<br/>
 
כאשר מתרחשת שגיאה בשיטה, השיטה יוצרת אובייקט ומעבירה אותו למערכת '''זמן הריצה''' ''(runtime system)''. האובייקט, הנקרא '''אובייקט חריג''' ''(exception object)'', מכיל מידע אודות השגיאה, איזה סוג של שגיעה ואת מצב התכנית כאשר אירעה השגיאה. יצירתו של אובייקט חריג ומסירתו למערכת זמן הריצה נקראת '''לזרוק חריג''' ''(throwing an exception)''.<br/>
 
לאחר ששיטה זורקת חריג, מערכת זמן הריצה מנסה למצוא משהו כדי להתמודד עם השגיאה. הרשימה של "משהו-אים" שיכולים לטפל בחריג הוא הרשימה מסודרות של שיטות שנקראו ע"י השיטה שבה אירעה השגיאה. רשימה זו ידועה בשם '''ערימת הקריאה''' או ''call stack'' (ראה בתרשים הבא).
 
<!-- תמונה כאן: exceptions-callstack.gif -->
 
מערכת זמן הריצה מחפשת בערמת הקריאות שיטה שמכילה בלוק של קוד שיכול להתמודד עם החריג. בלוק של קוד זה נקרא '''מטפל בחריגים''' ''(exception handler)''. החיפוש מתחיל בשיטה שבה התרחשה השגיאה וממשיכה דרך הערימה בסדר ההפוך שבו השיטות נקראו. כאשר מטפל מתאים נמצא, מערכת זמן הריצה מעבירה את החריג למטפל. המטפל נחשב מתאים אם הסוג החריג שנזרק מתאים לסוג שיכול להיות מטופל על ידי המטפל.<br/>
 
המטפל שנבח אמר לתפוס את החריג. אם מערכת זמן הריצה מחפשת בכל השיטות בערימת הקריאה בלי למצוא מטפל מתאים, כפי שמוצג באיור הבא, מערכת זמן הריצה (וכתוצאה מכך, התכנית) מסתיימת.<br/>
 
<!-- תמונה כאן: exceptions-errorOccurs.gif -->
 
ישנם כמה יתרונות בשימוש בחריגים כדי לנהל שגיאות מאשר שימוש בשיטות מסורתיות של ניהול שגיאות.