NOTE
Class Initialization Order
When initialization is triggered, initialization rules, and examples for a single class and an inheritance hierarchy.
This is a historical learning note and may contain outdated or incomplete understanding.
1. When Is Initialization Triggered?
When creating an instance with new, or for the class containing the main method.
2. Initialization Rules
If the parent class has not been initialized, initialize the parent class first.
3. Examples
3.1. A Single Class
public class InitialOrderTest
{
/* Static variable */
public static String staticField = "Static variable";
/* Instance variable */
public String field = "Instance variable";
/* Static initialization block */
static
{
System.out.println(staticField);
System.out.println("Static initialization block");
}
/* Initialization block */
{
System.out.println(field);
System.out.println("Initialization block");
}
/* Constructor */
public InitialOrderTest()
{
System.out.println("Constructor");
}
public static void main(String[] args)
{
new InitialOrderTest();
}
}
- Result
Static variable
Static initialization block
Instance variable
Initialization block
Constructor
3.2. With Inheritance
class Parent
{
/* Static variable */
public static String p_StaticField = "Parent--static variable";
/* Instance variable */
public String p_Field = "Parent--instance variable";
protected int i = 9;
protected int j = 0;
/* Static initialization block */
static
{
System.out.println(p_StaticField);
System.out.println("Parent--static initialization block");
}
/* Initialization block */
{
System.out.println(p_Field);
System.out.println("Parent--initialization block");
}
/* Constructor */
public Parent()
{
System.out.println("Parent--constructor");
System.out.println("i=" + i + ", j=" + j);
j = 20;
}
}
public class SubClass extends Parent
{
/* Static variable */
public static String s_StaticField = "Subclass--static variable";
/* Instance variable */
public String s_Field = "Subclass--instance variable";
/* Static initialization block */
static
{
System.out.println(s_StaticField);
System.out.println("Subclass--static initialization block");
}
/* Initialization block */
{
System.out.println(s_Field);
System.out.println("Subclass--initialization block");
}
/* Constructor */
public SubClass()
{
System.out.println("Subclass--constructor");
System.out.println("i=" + i + ",j=" + j);
}
/* Program entry point */
public static void main(String[] args)
{
System.out.println("Subclass main method");
new SubClass();
}
}
- Result
Parent--static variable
Parent--static initialization block
Subclass--static variable
Subclass--static initialization block
Subclass main method
Parent--instance variable
Parent--initialization block
Parent--constructor
i=9, j=0
Subclass--instance variable
Subclass--initialization block
Subclass--constructor
i=9,j=20
Discussion
Sign in with GitHub to comment. Discussions are stored as GitHub Issues.View on GitHub