static只执行一次,并且是在最前面执行,在创建对象之后,static对象才会创建,而且不会重复创建
public static void main(String[] args) { System.out.println("Inside main()"); Cups.c1.f(99); // (1) } static Cups x = new Cups(); // (2) static Cups y = new Cups(); // (3)
public class Cup { Cup(int marker) { System.out.println("Cup(" + marker + ")"); } void f(int marker) { System.out.println("f(" + marker + ")"); } }
public class Cups { static Cup c1; static Cup c2; static { c1 = new Cup(1); c2 = new Cup(2); } Cups() { System.out.println("Cups()"); } }
如果注释1,2,3行,只输出Inside main()<在创建对象之后,static对象才会创建>
注释2,3行输出
Inside main()
Cup(1)
Cup(2)
f(99)
注释3行
Cup(1)
Cup(2)
Cups()
Inside main()
f(99)
<上面两个对比,main方法中static对象先加载,然后再执行Cups.c1.f(99)>
放开注释
Cup(1)
Cup(2)
Cups()
Cups()
Inside main()
f(99)