在学习初始化顺序中发现的一个小问题-请各位高手指点
以下代码:
class A
{
A()
{
System.out.println( "A constructor no args ");
}
A(int i)
{
System.out.println( "A constructor " + i);
}
}
class B extends A
{
static A a =
{
new A(55);
System.out.println( "static A var ");
};
B(int i)
{
System.out.println( "B constructor " + i);
}
B()
{
super(88);
System.out.println( "B constructor " + 88);
}
}
class C extends B
{
static B b =
{
new B();
System.out.println( "static B var ");
};
C(int i)
{
super(i);
System.out.println( "C constructor "+i);
}
public static void main(String [] args)
{
C c = new C(5);
}
}
B类中的静态变量a应该只初始化一次才对啊.但是实际运行结果如下:
A constructor no args
A constructor 55
static A var
B constructor 5
A constructor 88
A constructor 55
static A var
B constructor 88
static B var
C constructor 5
也就是说B类中的静态变量a被初始化了两次?
请各位高手指点.
------解决方案--------------------static A a =
{
new A(55);
System.out.println( "static A var ");
};
里面不是调用 new A(55); 了吗
------解决方案--------------------基础知识呀.
------解决方案--------------------thinking in java第三版.第四章.
里面有你想要的东西.
我也是看的这个.不错的东西!
------解决方案--------------------这个例子很不错,学习了。
------解决方案--------------------这断代码可以编译通过吗
------解决方案--------------------A()
{
System.out.println( "A constructor no args ");
}
上面的构造器是如何被调用的,我怎么看来看去都象是只有
A(int i)
{
System.out.println( "A constructor " + i);
}
这个被调用