Static Members & Static Initialization Blocks
1Concept
Static fields belong to the class and are shared across all instances. Static Initialization Blocks (`static { ... }`) execute exactly once when the class is first loaded into memory by the JVM ClassLoader, before any constructors or static methods are called.
2Architecture Diagram
Class Loading Sequence: [ ClassLoader loads Class ] ---> [ Executes Static Blocks in order ] ---> [ Constructor on new ]
3Code Example
Core Java
public class StaticInitDemo {
private static final String APP_ENVIRONMENT;
// Static initialization block
static {
System.out.println("1. Static block executed during class loading.");
APP_ENVIRONMENT = System.getProperty("env", "PRODUCTION");
}
public StaticInitDemo() {
System.out.println("2. Constructor executed during object instantiation.");
}
public static void main(String[] args) {
System.out.println("Main execution started.");
StaticInitDemo instance = new StaticInitDemo();
System.out.println("Active Environment: " + APP_ENVIRONMENT);
}
}4Expected Output
1. Static block executed during class loading. Main execution started. 2. Constructor executed during object instantiation. Active Environment: PRODUCTION
5Key Takeaways
- ✓Static blocks execute once per classloader loading event, even if no objects are ever created.
- ✓Multiple static blocks execute in top-down appearance order.
- ✓Use static blocks to initialize complex static constants or load native libraries (`System.loadLibrary`).