黑马程序员技术交流社区
标题:
关于构造代码块和static
[打印本页]
作者:
何竹冬
时间:
2013-1-14 18:15
标题:
关于构造代码块和static
本帖最后由 何竹冬 于 2013-1-15 13:47 编辑
构造代码块给所有对象进行统一初始化,static修饰的成员变量是对象共享属性,
那么他们在给成员变量初始化的时候有什么不同 ?
作者:
jonn
时间:
2013-1-14 19:17
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。 而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期
而且初始化顺序也不一样
加载类;
静态变量初始化;
静态块;【其只能调度静态的,不能调度非静态的】
成员变量
作者:
张云杰
时间:
2013-1-14 19:33
http://bbs.itheima.com/thread-36165-1-1.html
传送门
作者:
刘志雄
时间:
2013-1-15 11:28
构造代码块是对所有对象进行初始化,对象一建立就会运行,且优先于构造函数先运行,只有建立对象后它才会运行,生命周期随着对象的消失而消失
而static修饰的成员变量会随着类的加载而加载,在没有对象建立时就已经存在,生命周期随着类的消失而消失
作者:
何竹冬
时间:
2013-1-15 13:47
刘志雄 发表于 2013-1-15 11:28
构造代码块是对所有对象进行初始化,对象一建立就会运行,且优先于构造函数先运行,只有建立对象后它才会运 ...
多谢,就是说他们初始化的时间不一样,构造代码块对象一建立就会执行,static是类已加载就初始化。
作者:
冷延冰
时间:
2013-1-15 14:03
构造代码块是对类的对象进行初始化构造,是归类的对象所有,要等着对象加载后再执行;
Static的成员为类所有,在加载类的时候就会有。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2