new对象时类的初始化顺序:
1.先看有没有继承父类 有父类需要先初始化父类
有实现接口的话不会初始化它的父接口,在使用接口内的常量或者静态方法的时候会进行初始化,这里有问题可以参考下面的链接接口的初始化规则_xiao_meimao的博客-CSDN博客_初始化接口
2.先加载父类的静态成员 方法 属性 和 块 注意此时并不会执行块 属性会是默认初始值
加载后会进行初始化 执行块和属性赋值 按照先后顺序 哪个在前会先执行赋值哪个
public class Test{
static{ cnt = 6;}
static int cnt = 100;
public static void main(String[] args){
System.out.println("cnt = " + new Test().cnt);
//最后输出是50,如果按照属性先赋值块后执行就应该是3
//按顺序执行就是cnt=6--->cnt=100---->cnt = 100/2 = 50.
}
static{ cnt /= 2;}
}
3.然后加载子类的静态