java中的实例方法存在哪

来源:百度知道 编辑:UC知道 时间:2024/05/02 19:12:16
教材上说一个类的实例方法在内存中只有一份拷贝,那么请问这个实例方法在内存中是存在于哪个位置,是该类的第一个对象中还是别的什么地方呢?
还有一个问题是java装载类的时候,为什么静态的方法或对象就有内存,而其它非静态的就没有,类的所有数据在内存中只有静态的才又空间么?
刚才查了下知道了方法是在CODE中的,那么再问一下一个程序装载的顺序?

HI我,我对你的问题蛮感兴趣的
类的实例方法在内存中是只有一份,不过肯定不会是第一个对象中,如果是第一个对象的话,那么当第一个对象被销毁的时候,那么后面的对象就永远无法调用了...
类的实例方法存在一个专门的区叫方法区,事实上类刚装载的时候就被装载好了,不过它们在"睡眠",只是这些方法必须当有对象产生的时候才会"苏醒".(比如,一个输出类的成员变量的方法,如果连对象都没有,何来的输出成员变量).所以,方法在装载的时候就有了,但是不可用,因为它没有指象任何一个对象。

而静态的又不一样了,静态的东西存在静态区,他们和类是一个等级的,就是说只要类被装载,它们就可以直接用.(用类名来调用).他们不依赖与任何对象,所以也不能输出任何对象的成员属性.(除非成员属性也是静态的).

而你最后的一句话也是错的,"类的所有数据在内存中只有静态的才又空间".
当然不是,每个对象在new的时候都会在堆区中开辟内存,用来保存对象的属性和方法.(实际上方法保存的只是方法区的引用,如果保存的是方法本身,那么试想一下,有多少个对象就得有多少个方法,那么又和第一点中"实例方法在内存中只有一份拷贝"相矛盾了)

好了,事实上内存图很复杂和麻烦,算比较深的东西了,很多用JAVA多年的人也不太了解其原理,因为开发也不要用..

在code中?我以前看好像方法是存在栈区,然后堆区是存放对象的。静态方法是在类初始化的时候加入到内存的,它是类的方法,非静态的也分配内存,只不过分配的时机不同就是了。
一个程序的装载顺序得看你程序是怎么发布的了,通常是根加载器会加载一些常用的类,你也可以把你写的类加入到classpath里面,然后加载器也会自动加载。比如java.lang包里面的类,我认为加载到内存里的类就是为了想要调用这个类的类做好准备的。

没有实例方法,应该说是类方法。
因为方法在内存中只有一份。
内存有个区域叫做静态代码段啥。类方法的就放在里面,而且只有一份。供堆内存里面的具体实例对象调用。

上面的讲的很好。你这个装载顺序不知道啥意思,我的理解,一般不就是java.e