javastatic-initialization

Java: When is a static initialization block useful?


What's the difference between initialization within a static block:

public class staticTest {

    static String s;
    static int n;
    static double d;

    static {
        s = "I'm static";
        n = 500;
        d = 4000.0001;
    }
    ...

And individual static initialization:

public class staticTest {

    static String s = "I'm static";
    static int n    = 500;
    static double d = 4000.0001;

    ....

Solution

  • A static initialization blocks allows more complex initialization, for example using conditionals:

    static double a;
    static {
        if (SomeCondition) {
          a = 0;
        } else {
          a = 1;
        }
    }
    

    Or when more than just construction is required: when using a builder to create your instance, exception handling or work other than creating static fields is necessary.

    A static initialization block also runs after the inline static initializers, so the following is valid:

    static double a;
    static double b = 1;
    
    static {
        a = b * 4; // Evaluates to 4
    }