שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2024 - חריגות
נתון כי מתודה f עלולה לזכור חריגה מסוג , אך הסוג המדויק של החריגה אינו נתון. נתון קוד הבא הקורא למתודה f:
בחרו בטענה הנכונה ביותר:
א. הקוד הנתון אינו מתקמפל
ב. הקוד אומנם מתקמפל, אך בזמן ריצה הקוד בהכרח יקרוס
ג. הקוד אומנם מתקמפל, אך בזמן ריצה הקוד בהכרח יקרוס ותזרק חריגה
ד. הקוד מתקמפל ורץ ללא שגיאות, כי החריגה אוטומטית תהפוך מ-checked ל-unchecked
בחרו בטענה הנכונה ביותר:
א. הקוד הנתון אינו מתקמפל
ב. הקוד אומנם מתקמפל, אך בזמן ריצה הקוד בהכרח יקרוס
ג. הקוד אומנם מתקמפל, אך בזמן ריצה הקוד בהכרח יקרוס ותזרק חריגה
ד. הקוד מתקמפל ורץ ללא שגיאות, כי החריגה אוטומטית תהפוך מ-checked ל-unchecked
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2024סמסטר ב
★★★★★
חריגותמעקב אחר קוד
שימו לב לסוג החריגה (checked) והכללים שהקומפיילר אוכף עבור טיפול בחריגות מסוג זה.
הטענה הנכונה היא א. הקוד הנתון אינו מתקמפל.
בג'אווה, קיימת הבחנה בין שני סוגי חריגות עיקריים:
1. Checked Exceptions: חריגות שהקומפיילר מחייב את המתכנת לטפל בהן. הטיפול יכול להתבצע באחת משתי דרכים: לעטוף את הקוד שעלול לזרוק את החריגה בבלוק
2. Unchecked Exceptions (Runtime Exceptions): חריגות שאינן דורשות טיפול על פי דרישת הקומפיילר (למשל,
בשאלה נתון שהמתודה
במקרה הנתון, המתודה
בג'אווה, קיימת הבחנה בין שני סוגי חריגות עיקריים:
1. Checked Exceptions: חריגות שהקומפיילר מחייב את המתכנת לטפל בהן. הטיפול יכול להתבצע באחת משתי דרכים: לעטוף את הקוד שעלול לזרוק את החריגה בבלוק
try-catch, או להצהיר שהמתודה עצמה עלולה לזרוק את החריגה הלאה באמצעות הוספת הצהרת throws לחתימת המתודה.2. Unchecked Exceptions (Runtime Exceptions): חריגות שאינן דורשות טיפול על פי דרישת הקומפיילר (למשל,
NullPointerException).בשאלה נתון שהמתודה
f עלולה לזרוק חריגה מסוג checked. המתודה main קוראת למתודה f. מכיוון ש-f עלולה לזרוק חריגה מסוג checked, הקומפיילר בודק האם המתודה הקוראת (main) מטפלת בחריגה זו.במקרה הנתון, המתודה
main אינה עוטפת את הקריאה ל-f בבלוק try-catch, ואינה מצהירה בעצמה שהיא זורקת את החריגה (אין לה הצהרת throws). לכן, כללי השפה מופרים, והקומפיילר יוציא שגיאת קומפילציה כגון "unreported exception; must be caught or declared to be thrown". כתוצאה מכך, הקוד כלל לא יתקמפל.