问一个有关静态数据初始化的问题
class Cup{
Cup(int marker){
System.out.println( "Cup( "+marker+ ") ");
}
void f(int marker){
System.out.println( "f( "+marker+ ") ");
}
}
class Cups{
static Cup c1;
static Cup c2;
static{
c1=new Cup(1);
c2=new Cup(2);
}
static{
System.out.println( "dfdsfsdf ");
}
Cups(){
System.out.println( "Cups() ");
}
}
class ExplicitStatic {
public static void main(String[] args) {
System.out.println( "Inside main() ");
Cups.c1.f(99);//1
}
//static Cups x = new Cups();//2
}
这样输出结果是:
Inside main()
Cup(1)
Cup(2)
dfdsfsdf
Cups()
Press any key to continue...
但是如果1注释掉,改成2
变成的是:
Cup(1)
Cup(2)
dfdsfsdf
Cups()
Inside main()
Press any key to continue...
Inside main()一个在前,一个在后,请问到底是什么原因啊。。求救啊。。
------解决方案--------------------class ExplicitStatic {
public static void main(String[] args) {
System.out.println( "Inside main() ");
//Cups.c1.f(99);//1
}
static Cups x = new Cups();//2
}
先初始化静态域,也就是先执行2
------解决方案--------------------第一种方法执行顺序应该是:
加载类ExplicitStatic --〉执行ExplicitStatic.main()方法 --> 加载类Cups ....
第二种方法执行顺序应该是:
加载类ExplicitStatic(在此期间会加载静态类Cups并实例化) --〉执行ExplicitStatic.main()方法 ....
所以Inside main()一个在前,一个在后
------解决方案--------------------如果有静态域,会先初始化静态域的