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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何竹冬 中级黑马   /  2013-1-14 18:15  /  2774 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何竹冬 于 2013-1-15 13:47 编辑

构造代码块给所有对象进行统一初始化,static修饰的成员变量是对象共享属性,
那么他们在给成员变量初始化的时候有什么不同 ?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。 而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期
而且初始化顺序也不一样
        加载类;
        静态变量初始化;
        静态块;【其只能调度静态的,不能调度非静态的】
        成员变量

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
回复 使用道具 举报
构造代码块是对所有对象进行初始化,对象一建立就会运行,且优先于构造函数先运行,只有建立对象后它才会运行,生命周期随着对象的消失而消失
而static修饰的成员变量会随着类的加载而加载,在没有对象建立时就已经存在,生命周期随着类的消失而消失

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
刘志雄 发表于 2013-1-15 11:28
构造代码块是对所有对象进行初始化,对象一建立就会运行,且优先于构造函数先运行,只有建立对象后它才会运 ...

多谢,就是说他们初始化的时间不一样,构造代码块对象一建立就会执行,static是类已加载就初始化。
回复 使用道具 举报
构造代码块是对类的对象进行初始化构造,是归类的对象所有,要等着对象加载后再执行;
Static的成员为类所有,在加载类的时候就会有。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马