首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java构造器的调用顺序解决办法

2012-09-20 
java构造器的调用顺序[codeJava]classCreature{publicCreature(){System.out.println( Creature无参数的

java构造器的调用顺序
[code=Java]
class   Creature
{
public   Creature()
{
System.out.println( "Creature无参数的构造器 ");
}
}
class   Animal   extends   Creature
{
public   Animal(String   name)
{
System.out.println( "Animal带一个参数的构造器,该动物的name为 "   +   name);
}
public   Animal(String   name   ,   int   age)
{
//使用this调用同一个重载的构造器
this(name);
System.out.println( "Animal带2个参数的构造器,其age为 "   +   age);
}

}
public   class   Wolf   extends   Animal
{
public   Wolf()
{
//显式调用父类有2个参数的构造器
super( "土狼 ",   3);
System.out.println( "Wolf无参数的构造器 ");
}
public   static   void   main(String[]   args)
{
new   Wolf();
}
}[/code]
上面的程序的main方法,只创建了一个Wolf对象,但是底层却做了很多操作,我是java初学者,不知底层执行的顺序,并求详解一下

[解决办法]
java中在初始化子类对象实例时,会先加载并初始化父类!所以子类构造器中必需调用父类构造器,如没有显示调用,则jvm会默认调用父类默认构造器(无参数的),如果此时父类没有无参构造器,则会报错!
[解决办法]

Java code
class   Creature { public   Creature() { System.out.println( "Creature无参数的构造器 ");  //1父类会被Animal(String name)隐式调用} } class   Animal   extends   Creature { public   Animal(String   name) { System.out.println( "Animal带一个参数的构造器,该动物的name为 "   +   name); //2被本类的Animal(String name, int age)调用} public   Animal(String   name   ,   int   age) { //使用this调用同一个重载的构造器 this(name); System.out.println( "Animal带2个参数的构造器,其age为 "   +   age); //3被子类Wolf调用} } public   class   Wolf   extends   Animal { public   Wolf() { //显式调用父类有2个参数的构造器 super( "土狼 ",   3); System.out.println( "Wolf无参数的构造器 "); //4最后打印} public   static   void   main(String[]   args) { new   Wolf(); } }
[解决办法]
参考下这个,根据你的程序体会一下:
http://wenwen.soso.com/z/q191435823.htm
[解决办法]
会先对父类进行初始化,然后才会进行到本身的显示的调用。
[解决办法]
父类的初始化先调用,然后再显示的调用

热点排行