In Java, exceptions are handled using the try-catch-finally
construct, which allows developers to manage errors gracefully and prevent abrupt program termination. Here’s how it works:
1. try
Block
The try
block contains the code that may throw an exception. Java will monitor this block, and if an exception occurs, it is passed to the corresponding catch
block.
2. catch
Block
The catch
block is used to handle the exception. It takes an argument that specifies the type of exception to catch. Multiple catch
blocks can be used to handle different types of exceptions.
3. finally
Block (Optional)
The finally
block contains code that will always execute after the try
block, regardless of whether an exception was thrown or caught. It is commonly used for resource cleanup, such as closing files or database connections.
Example 1: Basic try-catch
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // This will throw ArithmeticException
System.out.println(result);
} catch (ArithmeticException e) {
System.out.println("Exception caught: " + e.getMessage());
}
System.out.println("Program continues...");
}
}
Output:
Exception caught: / by zero
Program continues...
Example 2: Multiple Catch Blocks
public class MultipleCatchExample {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // ArrayIndexOutOfBoundsException
} catch (ArithmeticException e) {
System.out.println("ArithmeticException caught!");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException caught!");
} catch (Exception e) {
System.out.println("Some other exception caught!");
}
}
}
Output:
ArrayIndexOutOfBoundsException caught!
Example 3: Try-Catch-Finally
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Inside try block");
int value = 10 / 0; // Exception occurs
} catch (ArithmeticException e) {
System.out.println("Exception caught: " + e.getMessage());
} finally {
System.out.println("Finally block executed");
}
}
}
Output:
Inside try block
Exception caught: / by zero
Finally block executed
Example 4: finally
Ensuring Resource Cleanup
The finally
block is often used to close resources such as file streams.
import java.io.*;
public class FinallyResourceExample {
public static void main(String[] args) {
FileReader file = null;
try {
file = new FileReader("test.txt");
BufferedReader br = new BufferedReader(file);
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("IOException occurred: " + e.getMessage());
} finally {
try {
if (file != null) {
file.close();
System.out.println("File closed successfully.");
}
} catch (IOException e) {
System.out.println("Error while closing the file.");
}
}
}
}
Key Points to Remember
- Only one
catch
block will execute per exception. - Multiple
catch
blocks can be used to handle different types of exceptions. - The
finally
block always executes, regardless of whether an exception occurs or not. - Resources should be closed in the
finally
block to ensure proper cleanup. - Try-with-resources (
try
withAutoCloseable
) is a better alternative tofinally
for resource management.
Would you like me to go deeper into try-with-resources or custom exceptions? 🚀