结合《Thinking in Java》讲一讲自己对静态代码块的理解。Java静态代码块就是一段跟在static关键字后面的代码,用来将多个静态初始化动作组织成代码块,并且每个类的static代码块仅会执行一次。在以下两种情况下static代码块会被执行:
情况1:当首次生成这个类的一个对象时。
情况2:首次访问属于这个类的静态数据成员时。
public class ExplicitStatic {
public static void main(String[] args) {
new Cups(); //①
Cup cup = Cups.cup1; //②
}
}
class Cup {
Cup(int i) {
System.out.println("执行cup" + i + "的构造方法");
}
}
class Cups {
static Cup cup1;
static Cup cup2;
static {
System.out.println("执行static代码块");
cup1 = new Cup(1);
cup2 = new Cup(2);
}
}
main方法中单独执行语句①,触发 情况1。单独执行语句②,触发 情况2。二者控制台结果皆为:
执行static代码块
执行cup1的构造方法
执行cup2的构造方法
当同时执行语句①②时,控制台结果依然为:
执行static代码块
执行cup1的构造方法
执行cup2的构造方法
说明static代码块在同一个类中仅执行一次。