STUDYECRAT Java : try-catch-finally
60s
Java Try-Catch-Finally
Prove your skills in this interactive quiz
Live Code
Run snippets directly
Timed
60s per question
Scored
Earn 3D badges
★ Java Exception Handling : try-catch-finally: Key Interview Points
1. Finally Block Always Executes
try {
System.out.println("Try block");
throw new RuntimeException();
} catch (Exception e) {
System.out.println("Catch block");
} finally {
System.out.println("Finally block");
}
// Output: Try → Catch → Finally (even with exception)
System.out.println("Try block");
throw new RuntimeException();
} catch (Exception e) {
System.out.println("Catch block");
} finally {
System.out.println("Finally block");
}
// Output: Try → Catch → Finally (even with exception)
- Tip: Use finally for cleanup (e.g., closing files/DB connections)
- Real Use: Database connection cleanup in Spring applications
2. Return Statement in Finally Overrides Try/Catch
String demo() {
try {
return "From try";
} finally {
return "From finally";
}
}
// Method returns "From finally" (overrides try's return)
try {
return "From try";
} finally {
return "From finally";
}
}
// Method returns "From finally" (overrides try's return)
- Tip: Avoid returns in finally - it masks original exceptions
- Real Use: Common bug in legacy transaction handling code
3. System.exit() Skips Finally Block
try {
System.exit(0);
} finally {
System.out.println("This never executes");
}
// JVM terminates before finally runs
System.exit(0);
} finally {
System.out.println("This never executes");
}
// JVM terminates before finally runs
- Tip: Use shutdown hooks for mandatory cleanup with System.exit()
- Real Use: Critical in batch jobs where resources must be released
4. Nested Try-Catch Execution Flow
try {
try {
throw new IOException();
} catch (SQLException e) {
System.out.println("Inner catch");
}
} catch (Exception e) {
System.out.println("Outer catch");
}
// Output: "Outer catch" (exception bubbles up)
try {
throw new IOException();
} catch (SQLException e) {
System.out.println("Inner catch");
}
} catch (Exception e) {
System.out.println("Outer catch");
}
// Output: "Outer catch" (exception bubbles up)
- Tip: Order catch blocks from most specific to most general
- Real Use: Handling API failures with retry mechanisms
5. Try-With-Resources vs Finally
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Auto-closed even if exception occurs");
}
// Resource implements AutoCloseable (Java 7+)
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Auto-closed even if exception occurs");
}
// Resource implements AutoCloseable (Java 7+)
- Tip: Prefer try-with-resources over manual finally cleanup
- Real Use: File/network stream handling in modern Java
💡 Pro Interview Tip
When asked about exception handling, always mention the "throw early, catch late" principle - validate inputs immediately but handle exceptions at the appropriate layer (e.g., UI vs service layer).