Short answer
On first use the class is loaded and its static fields and static initializer blocks run once, parent before child.
Explanation
Then for each instantiation: the constructor implicitly calls super() first, then the instance field initializers and instance initializer blocks run top-to-bottom, then the rest of the constructor body. So a parent constructor can observe a child field that has not yet been initialized — a real trap when a parent constructor calls an overridden method.
Common mistakes
- Forgetting static initializers run once, at class initialization, before any instance work.
- Saying the subclass constructor body runs before the superclass constructor.