Menu
CoddyTech
flag Ar iconالعربيةdown icon

كتلة 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. نوع boolean (shouldThrow) يحدد ما إذا كان ينبغي طرح استثناء

ينبغي أن يقوم الأسلوب بما يلي:

  1. تهيئة متغير result بالقيمة 0
  2. في كتلة try:
    • إذا كانت قيمة shouldThrow هي true، فاقسم 10 على 0
    • وإلا، حوّل سلسلة number إلى عدد صحيح وخزّنه في 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 عبر الإنترنت