黑马程序员技术交流社区

标题: 关于调用代码块顺序的小问题 [打印本页]

作者: 0925李超月    时间: 2015-10-11 21:22
标题: 关于调用代码块顺序的小问题
比如创建了一个子类的对象Son   s   =   new  Son();    当内存读到变量Son   s 时,那么父类中的初始化值是否已经全部完成了?当内存读到 new  Son()时,才开始进行子类对象的初始化?对不对?
作者: 迷茫不堪的年纪    时间: 2015-10-11 22:24
个人感觉:我认为构造函数,创建对象时父类对被初始,子类调用父类结构的话应该是被初始后的,现在应该就不是构造了,所以我认为不在对子类初始化,不知道对不对。
作者: 0925李超月    时间: 2015-10-12 20:36
迷茫不堪的年纪 发表于 2015-10-11 22:24
个人感觉:我认为构造函数,创建对象时父类对被初始,子类调用父类结构的话应该是被初始后的,现在应该就不 ...

意思是父类出师换完成后,子类直接调用父类已经初始化完成的值,子类的就不用初始化了?
个人感觉这种解释不是很贴切.还是有点理解
望再能解释一下.谢了
作者: 迷茫不堪的年纪    时间: 2015-10-12 20:58
0925李超月 发表于 2015-10-12 20:36
意思是父类出师换完成后,子类直接调用父类已经初始化完成的值,子类的就不用初始化了?
个人感觉这种解释不 ...

我是这样理解的, 因为子类的作用是在父类之上优化,一般都是会赋值,应该不在初始化了。
作者: 迷茫不堪的年纪    时间: 2015-10-12 21:18
0925李超月 发表于 2015-10-12 20:36
意思是父类出师换完成后,子类直接调用父类已经初始化完成的值,子类的就不用初始化了?
个人感觉这种解释不 ...

特意帮你问了朋友,请看
Son s = new Son();  首先 会在内存中的方法去加载Son类, 然后在栈内存中创建该类的引用名s 将对象的地址付给s
,根据这个地址在堆内存中创建对象
Son s 的时候并没有创建,此时只是加载了类(子类和父类)
只有new 类名的时候才会创建对象 ,产生对象后,才进行的初始化值,没有对象就没有初始化,除了静态的

作者: 0925李超月    时间: 2015-10-12 22:00
迷茫不堪的年纪 发表于 2015-10-12 21:18
特意帮你问了朋友,请看
Son s = new Son();  首先 会在内存中的方法去加载Son类, 然后在栈内存中创建该 ...

是不是应该是对象初始化完成后,才会产生地址值,并赋给变量S 在栈内存中的s是在对象初始化完成后才会有值
感觉java像是多层加载了
因为Son  s时  即开始加载了子类然后又接着开始创建子类的对象,初始化完成后有地址值,才赋给s的
我看视频的老师一直是这样讲的
还是先有地址值以后根据地址值去创建对象
有点晕了
作者: 迷茫不堪的年纪    时间: 2015-10-13 00:14
0925李超月 发表于 2015-10-12 22:00
是不是应该是对象初始化完成后,才会产生地址值,并赋给变量S 在栈内存中的s是在对象初始化完成后才会有值
...

有地址才能把对象搞到堆里




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2