Java初始化顺序

父类静态变量\(\rightarrow\)父类静态代码块\(\rightarrow\)子类静态变量\(\rightarrow\)子类静态代码块
\(\rightarrow\)父类非静态变量\(\rightarrow\)父类非静态代码块\(\rightarrow\)父类构造器
\(\rightarrow\)子类非静态变量\(\rightarrow\)子类非静态代码块\(\rightarrow\)子类构造器

Java程序初始化一般遵循3个原则:

  1. 静态对象(变量)先于非静态对象(变量)初始化。其中静态对象(变量)只初始化一次,因为static在JVM中只有一块区域存储——方法区(Method Area),之所以被称为静态是因为从程序创建到死亡,它的地址值都不会改变其只在Class类对象初次加载时初始化,因此static只需要初始化一次,而非静态对象(变量)可能会初始化很多次。
  2. 如果类之间存在继承关系,那么父类优先于子类进行初始化。
  3. 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法之中,它们依然在任何方法(包括构造函数)被调用前先初始化。
posted @ 2021-03-11 22:31  chenzufeng  阅读(211)  评论(0编辑  收藏  举报