Menu
Coddy logo textTech

בלוק Finally

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 41 מתוך 59.

בלוק finally מכיל קוד שיופעל לאחר בלוקי try-catch, בין אם מתרחשת חריגה ובין אם לא. משתמשים בו בדרך כלל לפעולות ניקוי כמו סגירת קבצים או חיבורי מסד נתונים.

הנה המבנה הבסיסי של בלוק try-catch-finally:

try {
   // קוד שעלול לזרוק חריגה
} catch (ExceptionType e) {
   // קוד לטיפול בחריגה
} finally {
   // קוד שמתבצע תמיד
}

בואו נראה דוגמה עם מונה:

int counter = 0;
try {
   int result = 10 / 0;
   // פעולה זו תזרוק חריגה
   counter = 1;
} catch (ArithmeticException e) {
   counter = 2;
} finally {
   counter = 3;
   // פעולה זו תתבצע תמיד
}

לאחר הרצת הקוד שלעיל, counter מכיל:

3

הטיפוס שבסוגריים של catch קובע באילו שגיאות הבלוק הזה מטפל. שתי שגיאות נפוצות הן ArithmeticException, שנזרקת בחלוקה של מספר שלם באפס, ו-NumberFormatException, שנזרקת על ידי Integer.parseInt() כשהטקסט אינו מספר. catch יחיד יכול לטפל בכמה טיפוסים בו-זמנית:

try {
   int value = Integer.parseInt(text);
   int result = 10 / value;
} catch (ArithmeticException | NumberFormatException e) {
   // מטפל בשניהם
} finally {
   // מתבצע תמיד
}

תפיסה של Exception במקום זאת רחבה יותר: היא מטפלת בשניהם ובכל חריגה אחרת.

challenge icon

אתגר

קל

צרו מתודה בשם processNumber שמקבלת שני ארגומנטים:

  1. מחרוזת מסוג String (number) להמרה למספר שלם
  2. ערך בוליאני (shouldThrow) שקובע אם יש לזרוק חריגה

המתודה צריכה:

  1. לאתחל משתנה בשם result לערך 0
  2. בבלוק try:
    • אם shouldThrow הוא true, לחלק 10 ב-0
    • אחרת, להמיר את מחרוזת המספר למספר שלם ולשמור אותו ב-result
  3. בבלוק catch: להגדיר את result לערך -1
  4. בבלוק finally: להוסיף 100 ל-result
  5. להחזיר את result כמחרוזת

נסו בעצמכם

import java.util.Scanner;

public class Main {
    public static String processNumber(String number, boolean shouldThrow) {
        // כתבו כאן את הקוד שלכם
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String number = scanner.nextLine();
        boolean shouldThrow = Boolean.parseBoolean(scanner.nextLine());
        
        System.out.println(processNumber(number, shouldThrow));
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Java אונליין