static可以多次赋值?
package initialization;
//: initialization/ExplicitStatic.java
// Explicit static initialization with the "static" clause.
import static net.mindview.util.Print.*;
class Cup {
Cup(int marker) {
print("Cup(" + marker + ")");
}
void f(int marker) {
print("f(" + marker + ")");
}
}
class Cups {
static Cup cup1=new Cup(1);
static Cup cup2=new Cup(1);
static {
cup1 = new Cup(2);
cup2 = new Cup(2);
}
static {
cup1 = new Cup(3);
cup2 = new Cup(3);
}
Cups() {
print("Cups()");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
print("Inside main()");
Cups.cup1.f(99); // (1)
}
//static Cups cups1 = new Cups(); // (2)
// static Cups cups2 = new Cups(); // (2)
} /* Output:
Inside main()
Cup(1)
Cup(2)
f(99)
*///:~
==============================
out:
Inside main()
Cup(1)
Cup(1)
Cup(2)
Cup(2)
Cup(3)
Cup(3)
f(99)
==============================
关于上面这段代码有两个地方想请教一下:
1、调用cup1.f的时候貌似cup2也同时被初始化了。是不是可以理解成只要有一个static方法或者static域被调用那么所有的static域都被创建了呢?
2、static{}和普通的语句好像不太一样呢,这里的cup1和cup2多次被赋值和书上所讲的static域只能一次赋值有点矛盾呢,这是为什么呢?