hen an exception occurs in a static block or instance initialization block, Java handles it differently based on whether it is checked or unchecked.
1. Exception in a Static Initialization Block
🔹 If an exception occurs in a static block, the class will fail to load, and a ExceptionInInitializerError
is thrown.
🔹 The program will terminate if the class is accessed.
🔹 Occurs only once when the class is loaded.
Example: Exception in a Static Block
class Test {
static {
System.out.println("Static block executing...");
int x = 5 / 0; // ArithmeticException
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Main method started");
Test t = new Test(); // Class loading fails
}
}
Output:
Static block executing...
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
at Test.<clinit>(Main.java:4)
📌 Key Takeaways:
✅ The static block executes first when the class is loaded.
✅ Exception occurs → class loading fails → program crashes.
✅ The JVM throws ExceptionInInitializerError
if the exception is unchecked (e.g., ArithmeticException
).
✅ The static block never executes again, even if you try creating multiple objects.
2. Exception in an Instance Initialization Block
🔹 If an exception occurs in an instance block, the constructor never executes.
🔹 The object is not created, but the program continues unless explicitly terminated.
Example: Exception in an Instance Initialization Block
class Test {
{
System.out.println("Instance block executing...");
int x = 5 / 0; // ArithmeticException
}
Test() {
System.out.println("Constructor executed");
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Creating object...");
try {
Test t = new Test(); // Fails before constructor
} catch (Exception e) {
System.out.println("Caught Exception: " + e);
}
System.out.println("Program continues...");
}
}
Output:
Creating object...
Instance block executing...
Caught Exception: java.lang.ArithmeticException: / by zero
Program continues...
📌 Key Takeaways:
✅ The instance block executes before the constructor.
✅ If an exception occurs → object creation fails → constructor never runs.
✅ The program continues because we handled the exception.
✅ Unlike static blocks, instance blocks execute every time an object is created.
3. Checked Exception in a Static Block
🔹 If a checked exception (like IOException
) occurs in a static block, it must be caught inside the block, or the program will fail to start.
Example: Handling a Checked Exception
import java.io.*;
class Test {
static {
try {
throw new IOException("File not found");
} catch (IOException e) {
System.out.println("Handled IOException in static block");
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Main method running...");
Test t = new Test();
}
}
Output:
Handled IOException in static block
Main method running...
📌 Key Takeaways:
✅ Checked exceptions in a static block must be handled (because they must be caught or declared).
✅ If not handled, the JVM will throw ExceptionInInitializerError
.
4. Checked Exception in an Instance Block
🔹 Checked exceptions must be handled inside the instance block, or the constructor must declare them.
Example: Declaring a Checked Exception in an Instance Block
import java.io.*;
class Test {
{
try {
throw new IOException("Instance block exception");
} catch (IOException e) {
System.out.println("Handled IOException in instance block");
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Creating object...");
Test t = new Test();
}
}
Output:
Creating object...
Handled IOException in instance block
📌 Key Takeaways:
✅ Checked exceptions must be caught or declared in instance blocks.
✅ If not caught, the compiler will force the constructor to declare the exception.
Summary Table
Exception Type | Location | Behavior |
---|---|---|
Unchecked Exception (RuntimeException ) | Static Block | ExceptionInInitializerError , program crashes |
Unchecked Exception (RuntimeException ) | Instance Block | Object creation fails, but the program continues |
Checked Exception (IOException ) | Static Block | Must be caught inside the block, otherwise compilation fails |
Checked Exception (IOException ) | Instance Block | Must be caught or declared in the constructor |
Conclusion
🚀 If an exception occurs in an initializer:
- Static Block: Class fails to load,
ExceptionInInitializerError
occurs. - Instance Block: Object is not created, but the program continues.
- Checked Exceptions: Must be handled inside static/instance blocks.