Java静态块、非静态块、构造函数在初始化时的执行顺序
执行顺序
没有继承的执行顺序
- 实现自身的静态属性和静态代码块。
- 实现自身的非静态属性和非静态代码块。
- 执行自身的构造函数。
有继承的执行顺序
- 实现父类的公共静态属性和静态块级代码。
- 实现自身的静态属性和静态块级代码。
- 实现父类的非静态属性和非静态代码块。
- 执行父类的构造函数。
- 实现自身的非静态属性和非静态代码块。
- 执行自身的构造函数。
代码
静态块
static {
}
非静态块
{
}
静态块和非静态块的区别
- 相同点:都是JVM加载类时且在构造函数执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值。
- 不同点:静态代码块在非静态代码块之前执行(静态代码块 > 非静态代码块)。静态代码块只在第一次new时执行一次,之后不再执行。而非静态代码块每new一次就执行一次。