遇到一个关于静态调用方面的问题!望高手提点提点。。。
以下是源程序,有点疑惑就是对其输出结果有点疑惑!!
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);
}
Cups(){
System.out.println( "Cups() ");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
System.out.println( "Inside main() ");
Cups.c1.f(99);
}
}
上面程序的输出结果是:
Inside main()
Cup(1)
Cup(2)
f(99)
为什么会出现Cup(2)?为什么在调用Cups的静态方法c1的时候会将c2也一起调用,如结果显示的那样,既然c2也被调用,那它的那个方法f()为什么不跟着一起调用呢?
以上是我这个小菜鸟提出的问题,希望高手提点提点。感激不尽。。
------解决方案--------------------Cups类加载的时候会先执行static块
------解决方案--------------------怎么都没有高手来回答一下啊,我刚看了,没看过这样的程序,也还没搞清楚啊。。郁闷啊。
------解决方案--------------------静态变量初始化的时候就会执行,找本书看看,更清楚
------解决方案--------------------new 是调用类的构造函数,c2=new Cup(2);这句话是实例话一个cup的对象,并不是调用这个类的所有方法......还是在看看书吧
------解决方案--------------------静态块static{
c1=new Cup(1);
c2=new Cup(2);
}
会在该类被访问的时候被调用
------解决方案--------------------你在引用Cups类时,它就会执行static{
c1=new Cup(1);
c2=new Cup(2);
}
里面的动作,他是类级别的,只要你使用了Cups类,static{
c1=new Cup(1);
c2=new Cup(2);
}里面的肯定会被执行,并不会因为你没有调用就不执行,它是自动的;