日期:2014-05-20  浏览次数:20751 次

小菜鸟学JAVA 求指教 !
请大神们指教下 在执行在main()函数执行new Wolf(30)后 中间的调用过程 为什么是这样的结果 不是很理解。

class Creature{
{
System.out.println("creature 非静态初始化代码块");
}
public Creature(){
System.out.println("creature无参数的构造函数");
}
public Creature(String name){
this();
System.out.println("creature带有name 的构造函数--"+name);
}
}

class Animal extends Creature{
{
System.out.println("Animal 的非静态初始化代码块");
}
public Animal(){System.out.println("Animal 没有参数的构造函数");}
public Animal(String name){
super();
System.out.println("Animal 带有参数的构造函数--"+name);
}
public Animal(String name, int age){
super(name);
System.out.println("Animal 带有2个参数的构造函数--"+age);
}
}

class Wolf extends Animal{
{
System.out.println("wolf的 非静态初始化代码块");
}
public Wolf(){
super("灰太狼",3);
System.out.println("wolf无参数的构造函数");
}
public Wolf(double weight){
this();
System.out.println("wolf带weight参数的构造函数--"+weight);
}
}
public class T8 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
new Wolf(30);
}

}
运行结果如下:
creature 非静态初始化代码块
creature无参数的构造函数
creature带有name 的构造函数--灰太狼
Animal 的非静态初始化代码块
Animal 带有2个参数的构造函数--3
wolf的 非静态初始化代码块
wolf无参数的构造函数
wolf带weight参数的构造函数--30.0



------解决方案--------------------
运行的时候先是加载静态变量然后是静态代码块然后是非静态变量然后是非静态代码块
剩下的就是this调用的是本对象的句柄
super调用的是父类的句柄
其他的都是程序的正常执行顺序啊!!
------解决方案--------------------
先初始化类,再初始化对象.
------解决方案--------------------
初始化的顺序:默认初始化---->构造代码块--->显示初始化---->自身特有初始化,至于this()\super()是自身和父类的(应该不用多说吧),静态成员或静态代码块是随着类加载而加载的,类加载后才会有函数调用执行