黑马程序员技术交流社区

标题: 初始化顺序 [打印本页]

作者: 赵亚威    时间: 2013-3-17 13:56
标题: 初始化顺序
本帖最后由 赵亚威 于 2013-3-17 16:58 编辑

静态代码块,构造代码块,构造函数,静态成员变量,成员变量的初始化顺序
作者: 姓名长度不符    时间: 2013-3-17 13:59
静态代码块与变量优先于对象,同步于类,只要加载类,就一定得加载,详情看列子吧,http://bbs.itheima.com/thread-41502-1-1.html隔壁帖就有
欢迎各路大侠来指正指导
作者: 打工人    时间: 2013-3-17 15:21
这个问题毕老师讲的很详细了呢。。。你哪个地方不清楚呢
作者: 罗威    时间: 2013-3-17 15:58
http://bbs.itheima.com/forum.php ... mp;page=1#pid252658
这个问题和你问的相似,应该可以给你提供思路!
首先你要理解静态的都是随着类的加载而加载,所以他优先于对象存在,所以非静态不能调用静态;
因为静态的生命周期也是最长的,所以成员变量一般不定义成静态,比较消耗内存资源!

静态代码块(注意:静态代码快它只执行一次) 优先于 构造代码块 优先于 构造函数

你可以自己创建一个类加入你这些代码块,自己验证一下你就全明白了!

遇到问题首先自己先去试试,自然你就能得到你所需要的答案,而且记忆很深刻!
作者: 谭辉    时间: 2013-3-17 15:58
对象初始化过程:Person p = new Person(“zhangsan”,20);
1.        因为new用到了Person.class所以会先找到person .class文件并加载到内存中.
2.        执行该类中的static代码块,给Person.class类进行初始化
3.        在堆内存中开辟空间,分配内存地址
4.        在堆内存中建立对象的特有属性.并进行默认初始化.
5.        对属性进行显示初始化
6.        对对象进行构造代码块初始化
7.        对对象进行对应的构造函数初始化
8.        将内存的地址赋给栈内存中的p变量

作者: 赵亚威    时间: 2013-3-17 16:58
懂了 只是有一点小疑惑 现在懂了 我主要是纠结变量和构造函数上面 呵呵




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