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

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
Johnny Zoo (שיחה | תרומות)
שורה 271:
 
===כתיבה של מחלקות חריגות חדשות===
כתיבה של מחלקות חדשות עבור חריגות היא פשוטה מאוד: כותבים מחלקה שמרחיבה את המחלקה Exception (או את RuntimeException, אם נרצה שזוהי תהייה חריגה מסוג
Uncheked). המחלקה Exception מכילה ארבעה בנאים, אותם ניתן לדרוס במקרה ונרצה התנהגות אחרת. דוגמה פשוטה:
 
<source lang = "java">
public class ProtocolException extends Exception {
 
// Serial number
private static final long serialVersionUID = -8787530943809965100L;
 
/**
* Empty constructor
*/
public ProtocolException() {}
 
/**
* @param arg0 Error message
*/
public ProtocolException(String arg0) {
super(arg0);
}
 
/**
* @param arg0 Nested exception
*/
public ProtocolException(Throwable arg0) {
super(arg0);
}
 
/**
* @param arg0 Error message
* @param arg1 Nested exception
*/
public ProtocolException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
 
}
 
</source>
זוהי מחלקה שלא מוסיפה שום דבר למחלקה Exception. החשיבות שלה היא בכך שאם נשתמש בה - נוכל להבחין בין סוגי החריגות שייזרקו. ניתן להרחיב חריגה זו (כלומר, ליצור מחלקות שמרחיבות אותה) - גם כאן, במטרה להבחין בין סוגים שונים של בעיות.
 
ניתן לשנות את הבנאים במידה ונרצה להוסיף אפשרויות שונות למחלקה. נניח, לדוגמה, שאנו רוצים להוסיף את המילה "ERROR" לפני תיאור של כל חריגה שנזרקת. במקרה זה, נוכל לבצע כמה שינויים במחלקה:
<source lang = "java">
private static String addError(String message) {
return "ERROR: "+message;
}
 
public ProtocolException(String message) {
super(addError(message));
}
 
public ProtocolException(String message, Throwable cause) {
super(addError(message), cause);
}
</source>
 
כמובן, כמו בכל הרחבה של מחלקה אחרת - ניתן להוסיף בנאים נוספים, שיטות, ומשתנים. עם זאת, מומלץ להגביל את תפקיד החריגות ולא לתת להן לבצע פעולות שמתאימות לרכיבי אחרים בתוכנית. למשל: הגיוני שמחלקת חריגות תכתוב לקובץ Log - קובץ שמתעד את פעילות התוכנה. לא סביר שחריגה שנזרקת בזמן קריאה של קובץ תהייה אחראית לסגור אותו - בדרך כלל נרצה להשאיר את הבחירה איך לטפל בחריגה למי שיתפוס אותה.
 
{{תכנות מתקדם ב-Java|מוגבל}}