Initialization Order of Static and Instance Initializer Blocks in Java
Java initializes static and instance initializer blocks in a specific order, ensuring the correct loading and execution of classes. This ordering is crucial for managing dependencies and resource allocation.
Static Initializers
Java initializes static initializer blocks for a class only when that class or a static member of that class is first used. The following trigger the initialization of static blocks:
Instance Initializers
Instance initializer blocks, on the other hand, are executed immediately before the constructor of the class. The order of execution is determined by the appearance of these blocks within the class definition.
Example
Consider the following code snippet:
class Parent { // Static initializer static { System.out.println("static - parent"); } // Instance initializer { System.out.println("instance - parent"); } // Constructor public Parent() { System.out.println("constructor - parent"); } } class Child extends Parent { // Static initializer static { System.out.println("static - child"); } // Instance initializer { System.out.println("instance - child"); } // Constructor public Child() { System.out.println("constructor - child"); } }
When the Child class is instantiated, the following output is generated:
static - parent static - child instance - parent constructor - parent instance - child constructor - child
This demonstrates that the static initializer of the parent class (in this case, Parent) is executed before that of the child class (Child). Within each class, the instance initializer blocks are executed before the constructor.
Exception for Unused Classes
In Java, classes that are not used are never loaded or initialized. This applies to both static and instance initializer blocks. In the example code provided, adding a new class (IAmAClassThatIsNeverUsed) that is never referenced does not affect the initialization order of the other classes.
The above is the detailed content of How are Static and Instance Initializer Blocks Ordered in Java?. For more information, please follow other related articles on the PHP Chinese website!