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

© 周刚 中级黑马   /  2012-6-27 14:30  /  1923 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面是毕老师11天13集视频里的一个截图:
ticket变量“不加static在堆里面是共享数据,加static 在方法区里面是共享数据”有点不懂,求教。。。

QQ截图20120627142652.jpg (42.61 KB, 下载次数: 43)

QQ截图20120627142652.jpg

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
首先,楼主你的问题ticket变量“不加static在堆里面是共享数据,加static 在方法区里面是共享数据”错啦,毕老师的视频里面说的很清楚 加static在堆内存中的共享数据,不加static 在方法区里面是共享数据  
至于理解,其实很简单,static 变量是类变量,在程序运行的时候加载到堆内存中,为类的所有对象所共享,当程序退出运行的时候,才会释放内存空间, 而没有static修饰的变量就是局部变量,只在方法运行的时候会被创建,也就是加载到 栈内存中,当方法执行完毕,所占有的内存空间就会被释放掉,只在方法区才会有用,不像static修饰的是整个程序都有效的
回复 使用道具 举报
l楼主搞错了吧,加static是在数据区内共享数据,定义的是静态变量,也叫类变量。
不加static有两种存储路径,若是方法或者函数则储存在方法区里面,若是数据则储存在堆内存中。
另外楼主可以先判断变量属于什么类型。如果加static就是类变量,一定存储在共享区内。
如果是实例变量,就存储在堆内存中。
如果是局部变量,就存储在栈内存中。
回复 使用道具 举报
李兄,谢谢你的回答。我又证实了一遍,毕老师是面是这样讲的“不加静态时ticket堆内存中是共享数据,加static时在方法区中是共享数据”,
我上面文字描述是对的,但图片上的文字写反了,你也弄错了。
   不加static时,只有new了一个Ticket对象才会有ticket变量,又因为new出来的对象都是放在堆内存里面,
所以说不加static 时ticket是在堆中的共享数据;
  加了static 的数据放在方法区中:常量池在方法区中,和堆不是相同的概念。不要把常量池和堆混起来。
按照Inside the java virtual machine这本书上的说法,static的数据放在方法区中。


回复 使用道具 举报
流动的阳光 发表于 2012-6-27 14:54
李兄,谢谢你的回答。我又证实了一遍,毕老师是面是这样讲的“不加静态时ticket堆内存中是共享数据,加stat ...

:handshake谢谢,我一眼看到图片上的文字,就给答了,倒让你见笑了,看来我对堆内存和栈内存的理解还不够深入,有待进一步的加强
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马