تخطَّ إلى المحتوى

try-with-resources

try مع إدارة تلقائية للموارد try-with-resources

try-with-resources تُغلق الموارد (ملفات، اتصالات، تدفقات) تلقائيًا بعد الانتهاء — بديل finally اليدوي.

منذ Java 7، يمكنك وضع الموارد القابلة للإغلاق (AutoCloseable) داخل أقواس try — تُغلق تلقائيًا حتى لو حدث استثناء. أبسط وأوضح بكثير من finally اليدوي.

الصياغة

try (Resource r = new Resource()) {
    // استخدام المورد
} // يُغلق تلقائيًا هنا

// عدة موارد:
try (var in = new FileInputStream("a.txt");
     var out = new FileOutputStream("b.txt")) {
    // ...
}

📄 مثال

import java.io.*;

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} // br يُغلق تلقائيًا

// مقارنة مع finally اليدوي (الطريقة القديمة):
BufferedReader br2 = null;
try {
    br2 = new BufferedReader(new FileReader("file.txt"));
    // ...
} finally {
    if (br2 != null) br2.close(); // يدوي ومعرض للخطأ

أهم النقاط

العنصرالوظيفة
try (Resource r)يُغلق r تلقائيًا عند الانتهاء (يُنفذ close())
AutoCloseableأي صنف يُنفذ هذه الواجهة يمكن استخدامه هنا
عدة موارديُغلق كل مورد بالترتيب العكسي لإعلانه

💡 نصائح عملية

  • استخدمها دائمًا بدل finally لإغلاق الموارد — أقصر وأأمن
  • يمكنك استخدام var داخل try-with-resources لتقليل التكرار

⚠️ أخطاء شائعة

  • nxing موارد غير AutoCloseable في try-with-resources — خطأ ترجمة
  • nxing finalize() بدلاً من try-with-resources — finalize() مهجورة منذ Java 9

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.