Classes are initialized from top to bottom fashion so that fields declared on top initialized before field declared in bottom.
Super Class is initialized before Sub Class or derived class is initialized in Java.
If Class initialization is triggered due to the access of a static field, only Class which has declared static field is initialized and it doesn't trigger initialization of super class or sub class even if static field is referenced by type of Sub Class, Sub Interface or by implementation class of interface.
interface initialization in Java doesn't cause super interfaces to be initialized.
static fields are initialized during static initialization of class while non static fields are initialized when instance of class is created. It means static fields are initialized before non static fields in Java.
non static fields are initialized by constructors in Java. sub class constructor implicitly call super class constructor before doing any initialization, which guarantees that non static or instance variables of super class is initialized before sub class.