NOTE
Java Class and Object Initialization Order
Static initialization, superclass initialization, instance field initializers, initializer blocks, and constructors in Java.
This is a historical learning note and may contain outdated or incomplete understanding.
1. Class Initialization
Before a class is initialized, required superclass initialization occurs first. Within a class, static field initializers and static initializer blocks execute in source order as part of class initialization.
A class is initialized at most once per defining class loader under the JVM’s initialization synchronization rules.
2. Instance Construction
For an instance:
- memory starts with JVM default values;
- superclass constructor chain runs before the subclass constructor body;
- for each class in that chain, instance field initializers and instance initializer blocks execute in source order before that class’s constructor body.
Exact bytecode organization is compiler-generated, but the Java-visible order follows language rules.
3. Common Trap
Calling overridable methods from constructors can dispatch to subclass behavior before subclass initialization is complete. Avoid designs that expose partially initialized state.