תכנות מתקדם ב-Java/חריגות זמן ריצה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
אין תקציר עריכה
Johnny Zoo (שיחה | תרומות)
אין תקציר עריכה
שורה 187:
}
</source>
כלל זה נוגע כמעט לכל החריגות. עם זאת, קיימים גם יוצאים מן הכלל: חריגות מהטיפוס {{קוד בשורה|Error}} ומהטיפוס {{קוד בשורה|RunTimeException}}, וכל היורשים מהם אינן דורשות הכרזה (למשל: שיטות שעשויות לזרוק {{קוד בשורה|NullPointerException}} אינן דורשות הכרזה). חריגות כאלה מכונות '''Unchecked exceptions''' (אל מול החריגות הדורשות הכרזה, המכונות '''Checked exceptions'''). ניתן לכתוב חריגות שמרחיבות את המחלקה {{קוד בשורה|RunTimeException}} ובכך להימנע מהצורך להכריז על חריגה מאותו טיפוס.
 
ברוב המכריע של המקרים, ראוי ששיטה תכריז על סוגי החריגות אותן היא זורקת. בנוסף, בתיעוד של שיטה שזורקת חריגות, כדאי לשים אלמנט Javadoc נוסף: {{קוד בשורה|@throws}}, שמדווח על חריגה שהשיטה זורקת והסיבה לכך (אלמנט לכל חריגה). אם נחזור לדוגמה הקודמת:
 
<source lang = "java">
שורה 202 ⟵ 201:
</source>
 
התוצאה של הכרזה כזו היא שכעת מי שמשתמש בשיטה חייב לדאוג לתפיסה של החריגות אותה היא זורקת, (אם זה באמצעות בלוק Try-Catch, ואם באמצעות הוספה של הכרזת throws באותה השיטה, שמשמעותה - זריקה של אותה חריגה הלאה).
 
====סוגי חריגות מיוחדים====
כללהכלל זהשראינו נוגע כמעט לכל החריגות. עם זאת, קיימים גם יוצאים מן הכלל: חריגות מהטיפוס {{קוד בשורה|Error}} ומהטיפוס {{קוד בשורה|RunTimeException}}, וכל היורשים מהם אינן דורשות הכרזה (למשל: שיטות שעשויות לזרוק {{קוד בשורה|NullPointerException}} אינן דורשות הכרזה). חריגות כאלה מכונות '''Unchecked exceptions''' (אל מול החריגות הדורשות הכרזה, המכונות '''Checked exceptions'''). ניתן לכתוב חריגות שמרחיבות את המחלקה {{קוד בשורה|RunTimeException}} ובכך להימנע מהצורך להכריז על חריגה מאותו טיפוס.
 
חריגות מטיפוס Error הן חריגות מיוחדות שנזרקות כאשר התרחש אירוע חיצוני ששיבש את פעילות התוכנית (למשל: בעיית חומרה). חריגות מטיפוס RunTimeError הן חריגות שבדרך כלל מרמזות על תכנות שגוי, למשל - גישה לאובייקט שלא אותחל.
 
כאמור, שני סוגי חריגות אלה (ותתי המחלקות שלהן) אינם דורשים הכרזה.
 
===היררכייה של חריגות===
 
 
===כתיבה של מחלקות חריגות חדשות===