When “finally” block may not run in java


In Java, a finally block is used to ensure that a certain block of code is executed, regardless of whether an exception is thrown or not. However, there are a few specific scenarios in which a finally block will not run:

  1. System.exit(): If the Java program exits using the System.exit() method, the finally block will not be executed. This is because System.exit() forcefully terminates the entire JVM (Java Virtual Machine) process, bypassing any remaining code, including the finally block.
  2. Infinite Loop or Deadlock: If the code inside the try block results in an infinite loop or a deadlock situation, the finally block may never get a chance to execute. For example, if the program is stuck in an infinite loop, it won’t progress to execute the finally block.
  3. Fatal Errors: In some rare situations, there might be fatal errors or conditions that lead to the JVM’s abnormal termination before the finally block is executed. Examples of such errors include hardware failures, JVM crashes, or fatal signals.

It’s important to note that even if a finally block doesn’t run due to any of the above scenarios, the JVM will still try to perform necessary cleanup actions, such as releasing system resources (e.g., file handles) associated with the try block.

Here’s an example illustrating the first scenario:

public class FinallyExample {
    public static void main(String[] args) {
        try {
            System.out.println("Try block - Before System.exit()");
            System.exit(0); // Program exits here, finally block won't run.
            System.out.println("Try block - After System.exit()"); // This line won't be executed.
        } finally {
            System.out.println("Finally block - This won't be executed");

Leave a Reply

Your email address will not be published. Required fields are marked *