黑马程序员技术交流社区

标题: 请教问题 [打印本页]

作者: 郑强强    时间: 2012-4-8 22:13
标题: 请教问题

为什么构造函数的初始化优于构造代码段的初始化,而构造代码段的执行顺序优于构造函数的呢??

作者: 高铭    时间: 2012-4-8 22:18
LZ说的是构造代码块吗? 构造代码段 刚百度了一下 感觉挺深奥的  
构造代码块还可以
构造代码块作用是给对象初始化。
对象一建立就执行,而且优先于构造函数执行
构造代码块中定义的是不同对象共性的初始化内容


静态代码块
随着类的加载而执行,只执行一次。并优先于主函数用于给类进行初始化。
作者: 胡元    时间: 2012-4-8 22:31
因为构造代码块是给所有的对象初始化,所以有可能被构造函数覆盖掉,所以构造
函数的初始化优于构造代码段的初始化。
而构造代码块是共性内容,所以执行顺序上比构造函数早,所以顺序上
优于构造函数!
作者: newlaw2013    时间: 2012-4-8 23:04
对象的初始化过程:bxd day06 07节
Person p = new Person();
这一句话都做了什么事情?
1,因为new用到了Person.class 。所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话。给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显式初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址赋值给栈内存中的p变量。
“构造函数的初始化优于构造代码段的初始化?”这样理解应该有问题吧?
对于非继承的初始化过程,顺序是:静态变量-->静态初始化块-->变量-->初始化块-->构造器
作者: 程旦    时间: 2012-4-8 23:45
楼主这么说吧,构造函数可以覆盖构造代码块里面的数据,这样谁先执行,谁优先谁不就清楚了吗
作者: pray    时间: 2014-4-26 06:40
烦!(此心情虽然就一个字,却深刻表达了我的感受,可谓言简意赅,一字千金,足可表达我深厚的文学功底和扎实的写作技巧。实在是佩服自己!




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