Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is try-with-resources and why is it preferred over manual resource closing? try-with-resources क्या है और manual resource closing से क्यों बेहतर है?

Answer

try-with-resources automatically closes any resource that implements AutoCloseable when the try block finishes, even if an exception occurs - eliminating the need for manual close() calls in finally.

// OLD WAY - manual resource management, verbose and error-prone
BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader('data.txt'));
    System.out.println(reader.readLine());
} catch (IOException e) {
    System.out.println('Error: ' + e.getMessage());
} finally {
    if (reader != null) {
        try {
            reader.close();  // must remember this, and it can ALSO throw
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// MODERN WAY - try-with-resources (Java 7+)
try (BufferedReader reader2 = new BufferedReader(new FileReader('data.txt'))) {
    System.out.println(reader2.readLine());
} catch (IOException e) {
    System.out.println('Error: ' + e.getMessage());
}
// reader2.close() is called AUTOMATICALLY, even if an exception occurs

// Multiple resources - closed in REVERSE order of declaration
try (
    FileInputStream in = new FileInputStream('input.txt');
    FileOutputStream out = new FileOutputStream('output.txt')
) {
    // use both streams
}  // out closed first, then in

// Custom class using try-with-resources - must implement AutoCloseable
class MyResource implements AutoCloseable {
    public void use() { System.out.println('Using resource'); }
    @Override
    public void close() { System.out.println('Resource closed'); }
}

try (MyResource resource = new MyResource()) {
    resource.use();
}  // close() called automatically

try-with-resources try block खत्म होने पर AutoCloseable implement करने वाले किसी भी resource को automatically close कर देता है, भले ही exception आए।

// पुराना तरीका - manual resource management
BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader('data.txt'));
    System.out.println(reader.readLine());
} catch (IOException e) {
    System.out.println('Error: ' + e.getMessage());
} finally {
    if (reader != null) {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// Modern तरीका - try-with-resources (Java 7+)
try (BufferedReader reader2 = new BufferedReader(new FileReader('data.txt'))) {
    System.out.println(reader2.readLine());
} catch (IOException e) {
    System.out.println('Error: ' + e.getMessage());
}
// close() automatically call होता है

// Multiple resources - reverse order में close होते हैं
try (
    FileInputStream in = new FileInputStream('input.txt');
    FileOutputStream out = new FileOutputStream('output.txt')
) {
    // दोनों streams use करना
}

class MyResource implements AutoCloseable {
    public void use() { System.out.println('Resource use हो रहा है'); }
    @Override
    public void close() { System.out.println('Resource close हुआ'); }
}

try (MyResource resource = new MyResource()) {
    resource.use();
}

Was this answer clear?