静态变量和静态方法在类加载的时候执行
1、静态块优先执行加载 并且静态块之执行一次
2、非静态块或者非静态变量其次加载
3、最后是构造器加载
如果某个对象出发执行了第一个静态块
那么其他所有的静态块都由此对象初始化执行
不要再静态块new对象
栗子:
public class Employee {
{
System.out.println("初始化块执行了");
}
static {
Employee bb = new Employee();
System.out.println("静态初始化块11执行了");
}
static {
System.out.println("静态初始化块22执行了");
}
public Employee() {
System.out.println("构造方法执行了");
}
}
测试类
public class Test {
public static void main(String[] args) {
Employee a = new Employee();
Employee b = new Employee();
}
}
初始化块执行了 被a里面的bb执行
构造方法执行了
静态初始化块11执行了 被a执行
静态初始化块22执行了 被a执行
初始化块执行了
构造方法执行了
初始化块执行了
构造方法执行了
本文中只出现了两个静态块的执行说明了 静态代码块只执行一次
而两个静态代码快相邻输出说明所有静态块只由第一个new出来的对象执行