דילוג לתוכן המרכזי
מודול 5 · שיעור 2 מתוך 210/14 בקורס~12 min
שיעורי מודול (2/2)

נסה-עם-משאבים

בגירסאות ישנות יותר של Java, ניהול משאבים הדורשים סגירה מפורשת (כגון קבצים, חיבורי מסד נתונים או זרמי רשת) דרש חסימת finally חובה כדי להבטיח שהם נסגרו. זה הוביל לקוד מילולי ונוטה לדליפה.

Java 7 הציגה את הצהרת try-with-resources, המבטיחה סגירה אוטומטית של כל המשאבים המוצהרים בתוך הבלוק try, בתנאי שהם מיישמים את ממשק AutoCloseable.

התחביר

משאבים מוצהרים ומאוחלים בתוך סוגריים מיד לאחר מילת המפתח try.

Java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs

הכרזה על משאבים מרובים

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

Java
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Use resources
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
}

יצירת משאבים מותאמים אישית

ניתן להשתמש במשאב מותאם אישית בבלוק try-with-resources כל עוד הוא מיישם java.lang.AutoCloseable ועובר על שיטת close().

Java
public class DatabaseConnection implements AutoCloseable {
    public void query(String sql) {
        System.out.println("Running query: " + sql);
    }

    @Override
    public void close() {
        System.out.println("Connection closed!");
    }
}

נסה זאת בעצמך

פעילות גופנית#java.m5.l2.e1
ניסיונות: 0טוען...

השלם את שיטת readFile באמצעות הצהרת try-with-resources כדי לאתחל BufferedReader עוטף FileReader בנתיב. בבלוק ה-catch, ייירט את IOException והדפיס 'שגיאה בקריאת קובץ'.

טוען עורך...
הצג רמז

הכריז על 'BufferedReader' בסוגריים מיד אחרי 'try', והטמיע טיפול 'IOException'.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#java.m5.l2.e2
ניסיונות: 0טוען...

הצג את המשאב המותאם אישית CustomResource בתוך בלוק try-with-resources, הפעל עליו את שיטת doWork() וטפל ב-Exception על ידי הדפסת 'Error'.

טוען עורך...
הצג רמז

השתמש ב- `try (CustomResource res = new CustomResource())` וקרא בתוכו `res.doWork();`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#java.m5.l2.e3
ניסיונות: 0טוען...

הכריז גם על FirstResource וגם על SecondResource באותו מבנה של נסה עם משאבים. טפל בחריגה על ידי הדפסת 'שגיאה'.

טוען עורך...
הצג רמז

הפרד את ההצהרה של שני המשאבים בתוך הסוגריים של `try` באמצעות נקודה-פסיק `;`.

הפתרון זמין לאחר 3 ניסיונות