A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在大二的时候上c++的课   老师说成员函数  一个类只存一份   不用像非静态成员变量一样一个对象一份   现在看毕老的javase课程   说到静态函数的问题  静态函数肯定也是只存一份 我就想静态与非静态函数在内存中的存储有什么区别   静态函数应该只是在调用的时候对于内存才会有优化的效果吧?    如果是这样我又想知道优化的方式或者原因是有个标志位之类的东西(两个应该都在方法区储存)  还是别的什么  问题比较啰嗦 希望大神或者战友能予以解答 谢谢!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
静态方法是类方法,代码在共享区,非静态方法是对象方法,需要对象调用。
回复 使用道具 举报
静态成员是随着类的加载而加载,存在于方法区(也叫共享区),静态成员可以直接类名调用,效率稍高。
回复 使用道具 举报
它们生存周期不一样
静态方法中不能访问非静态方法,必须是实例化了一个对象,然后通过对象访问这个非静态方法,那么当这个对象挂了得时候,他的方法自然就挂了.非静态方法可以访问静态方法.
回复 使用道具 举报
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

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


PS:这种问题自己谷歌不就行了?是为了捞技术分还是什么?什么事情都指望别人怎么行
回复 使用道具 举报
静态(变量、方法)是类的所有对象共有的,内存中只有一份拷贝,不单独属于某一个具体的对象,所以用 类名 静态变量名(或静态方法名),或 对象名.静态变量名(或静态方法名)来访问。
非静态(变量方法)则是每一个对象都有自己的一份,所以用 对象名.非静态变量(或非静态方法名)来访问。
回复 使用道具 举报
黄小贝 发表于 2012-12-6 08:22
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

stack 区存放函数参 ...

。。。。。。  一起讨论下
回复 使用道具 举报
黄小贝 发表于 2012-12-6 08:22
虚拟机内存分为四个区:stack segment,heap segment,data segment,code segment;

stack 区存放函数参 ...

还有我问的是静态方法谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马