English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
try-with-resources هي ميكانيكية جديدة لمعالجة الاستثناءات في JDK 7، وتتيح إغلاق المصادر المستخدمة في جملة try-catch بسهولة. ما يعنيه المصدر (resource) هو الأشياء التي يجب إغلاقها بعد اكتمال البرنامج. تأكد جملة try-with-resources من إغلاق كل مصدر عند انتهاء الجملة. يمكن استخدام أي شيء implements interface java.lang.AutoCloseable (والذي يشمل كل شيء implements java.io.Closeable) كمصدر.
تم تحسين تعريف try-with-resources في JDK 9. إذا كان لديك مصدر final أو مساوي له، يمكنك استخدامه في جملة try-with-resources دون الحاجة إلى إعلان متغير جديد في جملة try-with-resources.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test"));}} } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { return br1.readLine(); } } }
نتيجة الإخراج هي:
test
في المثال السابق، يجب علينا إعلان المصدر br1 داخل جملة try، ثم يمكننا استخدامه.
في Java 9، لا نحتاج إلى إعلان المصدر br1 لاستخدامه، ونحصل على نفس النتيجة.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test"));}} } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (br) { return br.readLine(); } } }
النتيجة الصادرة للتنفيذ هي:
test
عند التعامل مع الموارد التي يجب إغلاقها، استخدم جملة try-with-resources بدلاً من جملة try-finally. الكود الناتج أكثر براعة، وأكثر وضوحاً، وأكثر استفادة في حالات الاستثناء. يصبح كتابة الكود الذي يجب إغلاق فيه الموارد أسهل وأقل عرضة للخطأ باستخدام جملة try-with-resources، بينما يكون استخدام جملة try-finally غير ممكن في الواقع.