Sequence of Execution

Init blocks execute in the order they appear.
Static initialization blocks are executed at class loading time and they run once.
Instance initialization blocks run after the constructor's call to super().
Instance initialization blocks run every time a class instance is created

Here is a sample to illustrate the behavior:

package com.learn.java;

import java.io.PrintStream;

class SuperClass {
static {
System.out.println("Superclass Static Block");
}

static PrintStream strStatic = System.out.append("Superclass Static Field Init\n");
PrintStream strInst = System.out.append("Superclass Field Init\n");

{
System.out.println("Superclass Instance block");
}

// no-arg constructor
public SuperClass() {
System.out.println("Superclass constructor");
}
}

public class SubClass extends SuperClass {
static {
System.out.println("Subclass Static block");
}

static PrintStream strStatic = System.out.append("Subclass Static Field Init\n");
PrintStream strInst = System.out.append("Subclass Field Init\n");

{
System.out.println("Subclass Instance block");
}

// no-arg constructor
public SubClass() {
System.out.println("Subclass constructor");
}

// main method
public static void main(String[] args) {
new SubClass();
}
}


Output:

Superclass Static Block
Superclass Static Field Init
Subclass Static block
Subclass Static Field Init
Superclass Field Init
Superclass Instance block
Superclass constructor
Subclass Field Init
Subclass Instance block
Subclass constructor

No comments:

Post a Comment

Followers