为什么有的时候像下面的会执行。什么时候不会执行? 请教? 谢谢,急! 谢谢 !急
class C
{
C()
{
System.out.print( "C ");
}
}
class A
{
C c = new C();//这里print a string "C " why????
A()
{
this( "A ");
System.out.print( "A ");
}
A(String s)
{
System.out.print(s);
}
}
class sadf extends A
{
sadf()
{
super( "B ");
System.out.print( "B ");
}
public static void main(String[] args)
{
new sadf();
}
}
打印结果是CBB, 为什么会打印C;
class A
{
C c = new C();//这里print a string "C " why????
而下面的一个却不打印
class C
{
C()
{
System.out.print( "C ");
}
}
public class NewClass {
C dd = new C(); //不打印出 C 来;
//但是将这句改为 static C dd = new C(); 会打印出 C 来。
//为什么呀?
public static void main(String args[]){ }
}
我知道static是一个类成员,可以在 构造器运行之前运行,
我就是不知道什么时候像上面的会执行。什么时候不会执行? 可以帮我举一些例子说明一下吗?
谢谢!!!!!!!!!!!
------解决方案--------------------第二个没有输出是因为没有new出对象,当然就没有输出了
------解决方案--------------------构造顺序->
请求类的时候,static的成员初始化执行,然后是static{}块执行。
调用构造函数的时候,因为先引用了类,所以先进行静态部分的初始化,然后进行下面步骤:
非静态成员初始化执行,然后是构造函数执行。
在类中声明非静态成员变量C dd = new C(),这里的new操作在调用构造函数的时候、构造函数执行体调用之前执行。也就是说,你需要调用new NewClass()(在这里是默认构造函数,因为你没有声明构造函数:-|),才能对这个dd进行初始化——如果没有new C(),初始化为null;有了new C(),初始化为C()。最后才是对NewClass()的调用。
啰唆了一点,明白了没有?关键是初始化顺序。