Phase 9 of 20 · Topic 9.4

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`).