📘 Module 8: Exception Handling in Java

👉 try-with-resources जो file handling, database connection, socket जैसे resource-based कामों में बहुत ज़रूरी होता है।


🔷 1. Problem in Traditional try-catch

जब हम किसी resource (जैसे: file, DB connection) को use करते हैं, तो हमें उसे manually close करना पड़ता है:

🔴 Traditional Approach (before Java 7):

FileReader fr = null;

try {
    fr = new FileReader("data.txt");
    // read file
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
} finally {
    try {
        if (fr != null) fr.close();  // manually close
    } catch (IOException e) {
        System.out.println("Error closing file");
    }
}

❌ समस्या: अगर हम close() करना भूल जाएँ, तो memory leak, file lock जैसी परेशानियाँ हो सकती हैं।


✅ 2. What is try-with-resources?

📌 Definition:

Java 7 से आया feature जिसमें हम resource को try-block के अंदर declare करते हैं, और Java उसे automatically close कर देता है, चाहे exception आए या ना आए।


🔹 Syntax:

try (ResourceType resource = new ResourceType()) {
    // use resource
} catch (Exception e) {
    // handle exception
}

✅ 3. Example with FileReader & BufferedReader

import java.io.*;

public class TryWithResourceDemo {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
        // No need to write br.close()
    }
}

➡️ यहाँ BufferedReader को automatically close कर दिया जाएगा, बिना manually close() लिखे।


📌 Condition:

जो भी class try-with-resources में use करनी है, वो AutoCloseable interface को implement करनी चाहिए।

Built-in AutoCloseable classes:

Class NameUse
FileReaderFile reading
BufferedReaderEfficient file read
FileInputStreamBinary file input
ScannerInput reading
Connection (JDBC)Database connection

🧠 Benefits of try-with-resources

BenefitExplanation
✅ Automatic closeresource को खुद बंद करता है
✅ No finally neededfinally block लिखने की ज़रूरत नहीं
✅ Less error-pronehuman error से बचाता है
✅ Clean codeshort और readable code

🔍 Multiple Resources Example:

try (
    FileReader fr = new FileReader("file.txt");
    BufferedReader br = new BufferedReader(fr)
) {
    System.out.println(br.readLine());
} catch (IOException e) {
    e.printStackTrace();
}

❗ Java Version Notes:

Java VersionFeature
Java 7try-with-resources introduced
Java 9Effectively final resource को बाहर declare करके भी use कर सकते हैं
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try (br) {
    System.out.println(br.readLine());
}

📘 Summary Table

FeatureDescription
Introduced inJava 7
Closes ResourceAutomatically
Works WithClasses implementing AutoCloseable
Replacesfinally block for closing
BenefitsLess error, clean code, memory safety

🧪 Practice Task:

  • File से data पढ़िए try-with-resources से
  • Scanner से user input लीजिए और उसे भी auto-close कराइए
  • JDBC connection से MySQL DB read करके auto-close कराइए (advance)