در بلاک های try-catch-finally شما پس از باز کردن یک منبع (مانند یک فایل) در قسمت try باید در بلاک catch به exception های آن رسیدگی می کردید و در نهایت در بلاک finally منبع را close می کردید:
BufferedReader br = null;
try {
String line;
br = new BufferedReader(new FileReader("C:\\testing.txt"));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
اما در بلاک try-with-resources وقتی بلاک try خاتمه پیدا می کند منابع باز بصورت خودکار close می شود و دیگر نیازی به بلاک finally نیست:
try (BufferedReader br = new BufferedReader(new FileReader("C:\\testing.txt")))
{
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
هر کلاسی که می خواهد در ساختار Try-with-resources استفاده شود باید اینترفیس AutoClosable را پیاده سازی کرده باشد.