ההבדל בין חריגה לבין שגיאה

Anonim

חריגה לעומת שגיאה

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

-> ->

מהו חריג?

חריגה היא אירוע, אשר יכול להפריע את זרימת התוכנית הרגילה. השם יוצא מן הכלל "אירוע יוצא דופן". זריקת חריגה היא תהליך יצירת אובייקט חריג ומסירה אותו למערכת זמן ריצה. אובייקט חריגה נוצר על ידי השיטה שבה התרחש חריגה. אובייקט יוצא מן הכלל מכיל מידע שימושי כגון הסוג והתיאור של החריג. כאשר מערכת זמן ריצה מקבל את האובייקט יוצא מן הכלל, הוא ינסה למצוא מישהו לטפל בו בתוך מחסנית השיחה על ידי חוצה אותו בסדר הפוך (שבו נקראו שיטות). ערימת השיחות היא רשימה מסודרת של שיטות, שנקראו לפני השיטה שבה התרחש חריגה. מערכת זמן הריצה מוצלחת אם היא מוצאת שיטה עם מטפל חריג. מטפל חריגה הוא גוש של קוד זה יכול באופן רשמי להתמודד עם חריג האמור. אם מערכת זמן הריצה מוצאת מטפל מתאים (i. סוג החריג מתאים לסוג שניתן לטפל בו), הוא יעבור את אובייקט החריג אל המטפל. זה נקרא לתפוס את החריג. עם זאת, אם לא ניתן לטפל בחריג, התוכנית תסתיים. ב- Java, חריגים יורשים מ 'בכיתה throwable. 'NullPointerException ו- ArrayIndexOutOfBoundsException הם שני חריגים נפוצים ב- Java.

-> ->

מהי שגיאה?

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

-> ->

מה ההבדל בין חריגה לבין שגיאה?

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