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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惜别的海岸 中级黑马   /  2013-5-17 13:18  /  1704 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 惜别的海岸 于 2013-5-18 12:16 编辑

函数有好多种,像main函数,成员函数、构造函数等是内存中那个区域存放的呢?类的成员变量为什么存放在堆内存中而成员函数却不存放在堆内存中?本人新手,请详解,谢谢。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
eycrckag 来自手机 中级黑马 2013-5-17 13:25:51
沙发
成员函数成员变量都是要和对象一起加载进堆内存呀。
回复 使用道具 举报
eycrckag 来自手机 中级黑马 2013-5-17 13:36:32
藤椅
成员变量和函数都必须创建对象,实例化后才可以调用。堆内存里面存储的是实例对象的引用。类中方法都存在方法区里面
回复 使用道具 举报
eycrckag 来自手机 中级黑马 2013-5-17 13:40:55
板凳
而主函数是一个类的方法,在这个类生成的时候就要被jvm调用在栈内存中开辟空间。它是一个静态的成员函数。这样说可以吗?
回复 使用道具 举报
本帖最后由 神之梦 于 2013-5-17 14:19 编辑

函数也称为方法,似乎所有的函数都是存放在内存中方法区。
我的理解是,我们写的所有方法的代码都是存放在方法区的,而在调用的时候,就拿到栈内存使用,使用完后就从栈内存消失,但是代码还存放在方法区。我想着就是为什么毕老师在讲解内存时,会在栈内存写上mian的原因,main是主函数也是静态函数,按理应该是随类的生成存放在方法区的,只要被使用时才会放到栈内存去使用。
好比具有拖地功能的拖把,我不用时就把它放在室外,用的时候就拿到室内使用。
不知道这样是否正确,相互交流...{:soso_e181:}

楼主要注意的是:成员变量也分静态和非静态,静态的成员变量也叫类变量,是随类的产生就存在了,存放的是方法区,而不是堆内存。
而非静态的成员变量时随对象的产生而在堆内存开辟空间存储,所以有对象才有非静态的成员变量,也被称为实例变量。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1 总结的不错

查看全部评分

回复 使用道具 举报
java中内存划分包括栈内存 堆内存  方法区 本地方法区 寄存器   当一个类被用到的时候就要加载进内存,不同的成分被放到不同的区域,静态成员变量、静态成员函数在方法区的静态部分,非静态成员函数以及构造函数在方法区的非静态部分,对于静态成员类刚开始加载内存的时候就初始化了,而非静态的成员变量在实例化对象的时候才在堆内存开辟空间存取,之所以成员函数在方法区是因为,如果每实例化一个对象就在堆内存中开辟空间岂不是很浪费内存,虽然对象不同但是他们的方法是一样的,方法里都有一个默认的引用型变量this 它指向调用它的具体对象。希望可以帮到你

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
神之梦 发表于 2013-5-17 14:15
函数也称为方法,似乎所有的函数都是存放在内存中方法区。
我的理解是,我们写的所有方法的代码都是存放在 ...

我赞同你的看法,我们可不可以这样理解,我们编写的代码要被执行的话最终要被编译成计算机能够执行的指令而这些指令就是存在于方法区中的 儿这些方法在被执行时,方法中定义的变量是需要空间存储的所以就在栈内存中为其开辟相应的空间,用完里就释放了,但是方法区中的指令还在那放着。个人愚见,一起讨论哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马