关于JAVA 类中属性与方法在内存中的问题

当实例化一个对象后,比如File f = new File();这个时候在内存中是不是存储了File的所有属性与方法?

那要是用不到的方法 也存进去 不是很占内存空间吗

这句话是在内存中实例化了对象(在堆里面开辟了空间,并且把这个空间地址指向f),也可以说是初始化了对象,注意的是初始化的过程。比如:int型的初始化为0,String的初始化为null,float初始化为0.0f。接着如果属性有赋值,例如 int a=10;再接着把10赋值给a。
总体而言。你这句话如果有要注意的话,就是初始化过程,什么静态的,构造方法之类,建议去看看。
是有生命周期的,你这个属于变量,在下一个花括号后就会把引用断掉,等着GC来回收了。追问

我还是有点不明,我意思是:比如说有一个类,类中有属性和方法,当实例化这个类的对象时,
是不是在堆内存存储了这个类的所有属性和方法?您的意思是这个类有个初值,属性和方法都有初值是么?然后赋值之后才算是使用了堆内存么?那不是所有属性和方法都要覆写了么。。。

追答

new关键字就是使用堆内存,当new了之后,堆里存放了这个对象的所有方法和属性,并且初始化。不是赋值了之后才使用堆内存,而是new了之后马上就使用堆内存,只是使用时顺带初始化
(初始化其实在声明的时候就初始化了,在声明的时候会初始化静态的代码块,静态的方法和属性。而new了之后会先执行代码块,然后初始化话属性,并且给他默认值,然后接着赋值,方法会放在方法区里面,同样的类你new了多次,方法区里的方法只会产生一个,调用的时候都是调用同一个。

追问

谢谢您。再问您一下,比如有一个类A,A a = (A)Class.forName("package.A").newInstance();这个是向上转型还是向下转型???

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-30
File f = new File()是内存中实例化了一个对象,这个对象当然要有这个类的所有方法和属性了。
我打个不太好的例子,你实例化了一个对象,就相当于生个孩子,这个孩子当然要健全才好,要是生出来少了胳膊或者大腿,你是不是要抓狂??
第2个回答  推荐于2018-04-05
成员变量在语句执行完了,它就会从内存中消失。
堆里的数据当你调完方法 时,不再有任何引用或扶起时。它就会被垃圾回收器回收(不是立马回收)
相似回答