كتلة 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 بدلًا من ذلك فهو أوسع نطاقًا: إذ يتعامل مع كليهما ومع أي استثناء آخر.
التحدي
سهلأنشئ أسلوبًا باسم processNumber يأخذ وسيطين:
- نوع String (
number) لتحويله إلى عدد صحيح - نوع boolean (
shouldThrow) يحدد ما إذا كان ينبغي طرح استثناء
ينبغي أن يقوم الأسلوب بما يلي:
- تهيئة متغير result بالقيمة 0
- في كتلة try:
- إذا كانت قيمة shouldThrow هي true، فاقسم 10 على 0
- وإلا، حوّل سلسلة number إلى عدد صحيح وخزّنه في result
- في كتلة catch: اضبط result على -1
- في كتلة finally: أضف 100 إلى result
- أعد 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));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت