问题描述
classCat{publicintage=100;}执行语句CatKitty=newCat();会为对象分配内存空间并调用默认构造函数初始化成员变量age,问题是默认构造函数会将整型成员初始化为0,那么Kitty.age的值究竟是100还是0呢?我试了一下,执行完CatKitty=newCat();后,Kitty.age的值为100.所以我猜测:如果类的成员变量在定义的时候同时赋值,那么在使用new进行类实例化时,默认构造函数对这些已经有初值的成员变量是不初始化的,只对没有初值的成员进行初始化。----------------这种猜测对吗?如果猜测不对,那又是什么机理?
解决方案
解决方案二:
classCat{publicintage;publicCat(){age=100;}}
会被解释成这样执行
解决方案三:
classCat{publicintage=100;publicCat(){age=0;}}
然后结果又等于0了
解决方案四:
classCat{publicintage=100;}编译器会编译为classCat{publicCat(){age=100;}publicintage;}而classCat{publicintage=100;publicCat(){age=0;}}编译器会编译为classCat{publicCat(){age=100;age=0;}publicintage;}
解决方案五:
默认构造函数什么都没做,编译器不会随便乱解释。至于你的那个“publicintage=100;”的定义是初始化变量定义,优先于任何构造函数的执行。就是好比我们使用一个变量前必须定义它,这个定义是最优先的动作,而这个赋值又是在定义时赋值,自然是仅次于定义执行的,至于构造函数,那个是最后才会去执行的,如果里面什么都不写,空的,那就是最后什么都不去执行而已。
解决方案六:
publicCat(){this.age=100;this.age=0;}publicCat(){this.age=100;this.age=0;}
解决方案七:
构造函数顾名思义,你要在创建类的对象的时候干什么~Cat(){你什么都没有干}那么成员本来是怎么定义就按原来的