![ישן](https://static.fresh.co.il/images/vBulletin/statusicon/post_old.gif)
29-01-2007, 09:31
|
|
|
חבר מתאריך: 28.06.06
הודעות: 150
|
|
כשלמדת try...catch ראית ש-JAVA מציע דרך לטפל בחריגות שנזרקות המהלך הריצה, שהן למעשה שגיאות לא קריטיות שזוהו ע"י התוכנה.
כמתכנתת, גם את תרצי לעתים לזרוק חריגות משלך. זאת על מנת לקבל התראות על תקינות פעולתו של הקוד, ובנוסף אינדיקציה מה השתבש ואיפה. דבר זה מאוד מקל על תחזוקתו של הקוד.
נתחיל ב-Constructors של המחלקה Throwable:
יוצר אובייקט "זריק" חדש עם null כערך של הודעת השגיאה.
יוצר אובייקט זריק חדש עם הודעה message על פרטי השגיאה.
יוצר אובייקט זריק חדש עם הודעת שגיאה message וסיבת זריקה cause (עליה אני ארחיב עוד מעט).
יוצר אובייקט עם סיבת זריקה cause (ההודעה תהיה ()cause.toString).
ניתן לתת לאובייקט זריק סיבת זריקה cause, שהיא אובייקט ממחלקה Throwable. זאת מכיוון שייתכן כי שגיאה מסויימת במחלקה שאת יורשת ממנה או משתמשת באובייקט שלה זורקת חריגה תוך כדי ריצה, ואחרי שתפסת אותה, את רוצה ליצור חריגה במחלקה שלך שתודיעה מה הייתה החריגה בהקשר של המחלקה שלך (משיקולי תחזוקה בד"כ) ובנוסף מה הייתה הסיבה לחריגה (שהיא חריגה אחרת) דבר זה נקרא "שרשור חריגות".
דוגמא:
קוד:
try {
lowLevelOp();
} catch (LowLevelException le) {
// Chaining-aware constructor
throw new HighLevelException(le);
}
בדוגמא, LowLevelOp היא מתודה במחלקה שאת משתמשת בה במחלקה שלך, LowLevelException היא מחלקה זריקה שנכתבה בעבור מחלקה זו ,ו-HighLevelException היא מחלקה זריקה שנכתבה עבור המחלקה שלך.
את מנסה להפעיל את המתודה lowLevelOp במחלקה שלך, ובמקרה שנזרקת שגיאה, את תופסת אותה וזורקת שגיאה משלך ומשרשרת אליה את השגיאה הקודמת.
קוד:
try {
lowLevelOp();
} catch (LowLevelException le) {
// Chaining-aware constructor
throw new HighLevelException("An exception in myOp, using lowLevelOp", le);
}
בדוגמא הזו את זורקת הודעת שגיאה משלך בנוסף לשרשור. נניח שהנסיון לקרוא למתודה LowLevelOp נמצאת בתוך המתודה myOp במחלקה שלך. כך את יודעת בדיוק לאיפה לפנות בקוד בכדי לטפל בשגיאה.
הסבר מפורט ניתן לקרוא באתר של Sun.
נערך לאחרונה ע"י DeadNight בתאריך 29-01-2007 בשעה 09:33.
|