Static blocks in Java

Unlike C++, Java supports a special block, called static block (also called static clause) which can be used for static initializations of a class. This code inside static block is executed only once: the first time you make an object of that class or the first time you access a static member of that class (even if you never make an object of that class). For example, check output of following Java program.

filter_none

edit
close

play_arrow

link
brightness_4
code

// filename: Main.java
class Test {
    static int i;
    int j;
      
    // start of static block 
    static {
        i = 10;
        System.out.println("static block called ");
    }
    // end of static block 
}
  
class Main {
    public static void main(String args[]) {
  
        // Although we don't have an object of Test, static block is 
        // called because i is being accessed in following statement.
        System.out.println(Test.i); 
    }
}

chevron_right


Output:
static block called
10



Also, static blocks are executed before constructors. For example, check output of following Java program.

filter_none

edit
close

play_arrow

link
brightness_4
code

// filename: Main.java
class Test {
    static int i;
    int j;
    static {
        i = 10;
        System.out.println("static block called ");
    }
    Test(){
        System.out.println("Constructor called");
    }
}
  
class Main {
    public static void main(String args[]) {
  
       // Although we have two objects, static block is executed only once.
       Test t1 = new Test();
       Test t2 = new Test();
    }
}

chevron_right


Output:
static block called
Constructor called
Constructor called

What if we want to execute some code for every object?
We use Initializer Block in Java

References:
Thinking in Java Book

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


15


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.