Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Instance Initialization Block (IIB) in Java

  • Difficulty Level : Easy
  • Last Updated : 19 Feb, 2021

In a Java program, operations can be performed on methods, constructors and initialization blocks. Instance Initialization Blocks or IIB are used to initialize instance variables . So firstly, constructor is invoked and the java compiler copies the instance initializer block in the constructor after the first statement super(). They run each time when object of the class is created. 
 

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

  • Initialization blocks are executed whenever the class is initialized and before constructors are invoked.
  • They are typically placed above the constructors within braces.
  • It is not at all necessary to include them in your classes.

Java




// Java program to illustrate
// Instance Initialization Block
class GfG {
    // Instance Initialization Block
    {
        System.out.println("IIB block");
    }
 
    // Constructor of GfG class
    GfG() { System.out.println("Constructor Called"); }
    public static void main(String[] args)
    {
        GfG a = new GfG();
    }
}


Output

IIB block
Constructor Called

Multiple Instance Initialization Blocks in a Program

We can also have multiple IIBs in a single class. If the compiler finds multiple IIBs, then they all are executed from top to bottom i.e. the IIB which is written at the top will be executed first. 



Java




// Java program to illustrate
// execution of multiple
// Instance Initialization Blocks
// in one program
class GfG {
    // Instance Initialization Block - 1
    {
        System.out.println("IIB1 block");
    }
 
    // Instance Initialization Block - 2
    {
        System.out.println("IIB2 block");
    }
 
    // Constructor of class GfG
    GfG() { System.out.println("Constructor Called"); }
 
    // Instance Initialization Block - 3
    {
        System.out.println("IIB3 block");
    }
 
    // main function
    public static void main(String[] args)
    {
        GfG a = new GfG();
    }
}


Output

IIB1 block
IIB2 block
IIB3 block
Constructor Called

Instance Initialization Block with parent class

You can have IIBs in parent class also. Instance initialization block code runs immediately after the call to super() in a constructor. The compiler executes parents class’s IIB before executing current class’s IIBs. 

Have a look at the following example.  

Java




// Java program to illustrate
// Instance Initialization Block
// with super()
 
// Parent Class
class B {
    B() { System.out.println("B-Constructor Called"); }
 
    {
        System.out.println("B-IIB block");
    }
}
 
// Child class
class A extends B {
    A()
    {
        super();
        System.out.println("A-Constructor Called");
    }
    {
        System.out.println("A-IIB block");
    }
 
    // main function
    public static void main(String[] args)
    {
        A a = new A();
    }
}


Output

B-IIB block
B-Constructor Called
A-IIB block
A-Constructor Called

In the above example, the compiler tries to execute constructor of class A, when the object of class A is created. But it finds super() statement and goes to the parent class constructor first to be executed. Order of execution, in this case, will be as follows: 

  1. Instance Initialization Block of the superclass. 
  2. Constructors of the superclass. 
  3. Instance Initialization Blocks of the class. 
  4. Constructors of the class.

Important points:  

  • Instance Initialization Blocks run every time a new instance is created.
  • Initialization Blocks run in the order they appear in the program
  • The Instance Initialization Block is invoked after the parent class constructor is invoked (i.e. after super() constructor call)

Related Article : 
The Initializer Block in Java
This article is contributed by Vishal Garg. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
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
Recommended Articles
Page :