|
老师讲的没错,哥们儿,是你错了,首先,您提供的代码是没法运行的,Cat类是哪儿来的?其次,我将Cat类改成Car类在eclipse上运行后,和您说的结果是一样的,但是,您没有注意到,加载类是在构造代码块之前执行的,我的意思是说:因为你是在Car类里面new Dog1,然后在Dog1里又new Car,你将A写在B前面,new Dog1时需要加载类,此时Car类也被加载,打印出“成员初始化”,紧接着将地址赋给变量o,然后执行构造代码块,打印“构造代码块初始化”;同理,您将B放在A前面也是按照加载类,构造代码快,内存地址赋值的顺序进行,因为B在前,所以new Dog1时,先执行构造代码块,此时Car类已经加载,但是没有执行Car里面的构造函数,等构造代码块执行完毕后,在执行Car里得构造函数,在给内存赋值。 |