黑马程序员技术交流社区

标题: 成员变量放在哪? [打印本页]

作者: 乔青山    时间: 2014-2-26 09:24
标题: 成员变量放在哪?
本帖最后由 乔青山 于 2014-2-26 09:36 编辑

查了好多网页,也在论坛问过,可惜还没有搞明白,可能是我问的不大明白。普遍认为呢,是放在堆中。但是,大家说放在堆中是因为new一个对象的时候,加载了类的信息,成员变量就随对象放在堆中(这也是毕老师讲的)。
而我的问题是:在没有new一个对象的时候,如果已经加载了类的信息(比如直接通过类名调用了静态属性),那类中的成员变量放在哪呢?忽然看到一句话,然后就豁然开朗了:加载类文件时,非静态成员变量(对象的特有属性)不会被加载。


作者: L_t    时间: 2014-2-26 09:30
1、static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享(因此可以用来统计一个类有多少个实例化对象),所以有些属性希望被所有对象共享,则必须将其声明为static属性,被static声明的属性成为全局属性。2、只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。3、类中定义的静态代码块会优先于构造块先执行,而且不管有多少个对象,静态代码块只执行一次你子类继承父类,不在子类的构造方法中调用父类方法,你可以不用super,你也可以方法重载!但建议还是用super,super就是怕你重写!

作者: 乔青山    时间: 2014-2-26 09:35
L_t 发表于 2014-2-26 09:30
1、static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被s ...

。。。。我也没问静态啊,我问的是非静态成员变量。
不过问别人还是问明白了 谢谢
作者: zxg08042810    时间: 2014-2-26 11:23
非静态变量随着对象的创建放在堆中,静态变量放在静态区中,其实对于静态变量关键的不是明白放在哪,而是要理解在一个类在创建不同的对象时静态起到了什么作用,进一步研究静态变量什么时候被释放




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