A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-8 22:13  /  2190 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

5 个回复

倒序浏览
LZ说的是构造代码块吗? 构造代码段 刚百度了一下 感觉挺深奥的  
构造代码块还可以
构造代码块作用是给对象初始化。
对象一建立就执行,而且优先于构造函数执行
构造代码块中定义的是不同对象共性的初始化内容


静态代码块
随着类的加载而执行,只执行一次。并优先于主函数用于给类进行初始化。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
因为构造代码块是给所有的对象初始化,所以有可能被构造函数覆盖掉,所以构造
函数的初始化优于构造代码段的初始化。
而构造代码块是共性内容,所以执行顺序上比构造函数早,所以顺序上
优于构造函数!

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
对象的初始化过程: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:38
报纸
楼主这么说吧,构造函数可以覆盖构造代码块里面的数据,这样谁先执行,谁优先谁不就清楚了吗
回复 使用道具 举报
烦!(此心情虽然就一个字,却深刻表达了我的感受,可谓言简意赅,一字千金,足可表达我深厚的文学功底和扎实的写作技巧。实在是佩服自己!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马