The order of initialization is given in JSL #12.4.2:
For static initialization:
- Execute either the class variable initializers and static initializers of the class, or the field initializers of the interface, in textual order, as though they were a single block.
For construction:
Evaluate the arguments and process that superclass constructor invocation recursively
Execute the instance initializers and instance variable initializers for this class, assigning the values of instance variable initializers to the corresponding instance variables, in the left-to-right order in which they appear textually in the source code for the class.
Execute the rest of the body of this constructor.
Note that initializer blocks and variable initializers are considered together, not separately.