黑马程序员技术交流社区

标题: 各位战友,求教静态和非静态方法在内存的存储差异 [打印本页]

作者: 李百韬    时间: 2012-12-5 00:04
标题: 各位战友,求教静态和非静态方法在内存的存储差异
在大二的时候上c++的课   老师说成员函数  一个类只存一份   不用像非静态成员变量一样一个对象一份   现在看毕老的javase课程   说到静态函数的问题  静态函数肯定也是只存一份 我就想静态与非静态函数在内存中的存储有什么区别   静态函数应该只是在调用的时候对于内存才会有优化的效果吧?    如果是这样我又想知道优化的方式或者原因是有个标志位之类的东西(两个应该都在方法区储存)  还是别的什么  问题比较啰嗦 希望大神或者战友能予以解答 谢谢!
作者: 庄生晓梦    时间: 2012-12-5 17:04
静态方法是类方法,代码在共享区,非静态方法是对象方法,需要对象调用。
作者: 何伟    时间: 2012-12-6 07:37
静态成员是随着类的加载而加载,存在于方法区(也叫共享区),静态成员可以直接类名调用,效率稍高。
作者: 化小东    时间: 2012-12-6 07:51
它们生存周期不一样
静态方法中不能访问非静态方法,必须是实例化了一个对象,然后通过对象访问这个非静态方法,那么当这个对象挂了得时候,他的方法自然就挂了.非静态方法可以访问静态方法.
作者: 黄小贝    时间: 2012-12-6 08:22
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

stack 区存放函数参数和局部变量;
heap  区存放对象;
data  区存放static 的变量或者字符串常量;
code  区存放类中的方法;
所以,静态变量是存放在data区的


PS:这种问题自己谷歌不就行了?是为了捞技术分还是什么?什么事情都指望别人怎么行

作者: Kevin123    时间: 2012-12-6 11:54
静态(变量、方法)是类的所有对象共有的,内存中只有一份拷贝,不单独属于某一个具体的对象,所以用 类名 静态变量名(或静态方法名),或 对象名.静态变量名(或静态方法名)来访问。
非静态(变量方法)则是每一个对象都有自己的一份,所以用 对象名.非静态变量(或非静态方法名)来访问。

作者: 李百韬    时间: 2012-12-6 13:57
黄小贝 发表于 2012-12-6 08:22
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

stack 区存放函数参 ...

。。。。。。  一起讨论下
作者: 李百韬    时间: 2012-12-6 13:58
黄小贝 发表于 2012-12-6 08:22
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

stack 区存放函数参 ...

还有我问的是静态方法谢谢




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