首先类第一次加载的时候,默认执行静态成员的初始化,静态成员之间的顺序是按照写的先后顺序。
如果该类存在父类,默认先执行父类的静态初始化
在new一个对象的时候,会为该对象对应的非静态成员变量分配内存空间和执行初始化。
按以上的规则,先为静态成员d初始化,new了一个对象 ->然后为d对象对应的非静态成员变量a初始化->然后执行SuperClass类的static代码块->调用SuperClass的构造器->调用subClass的构造器->然后执行App类的static 代码块->最终执行main方法
一段程序的完整执行过程是先编译,然后加载到jvm,然后初始化,然后你才能使用(当然中间还有需要细节)。初始化是执行类构造器方法的过程,类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的(不是类的构造方法)。所以,简而言之,一个类在初始化的时候,会先执行它的静态代码块,当然,如果这个类有父类的话,同样的道理,如果发现该父类没有初始化,则需要先对其父类进行初始化,再对该类进行初始化。