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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏冬 中级黑马   /  2012-12-6 23:17  /  1805 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么st .name="lisi"  st1.name没有赋值啊  怎么打印的都是lisi呢?  谁能给我解释一下呢?

QQ截图20121206231026.png (32.89 KB, 下载次数: 26)

QQ截图20121206231026.png

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
楼主,字符串的类已经复写了Object的tostring方法,所以System.out.println()的时候是可以直接输出lisi的,这个你可以查查java的API的,
回复 使用道具 举报
static_用法 st = new static_用法()  
st.name = "lisi"   关键就是这句   这句的意思就相当于将"lisi"这个值赋给了st.name  而st.name中的name就是引用的static_用法中的
你这么一赋 就将"static_用法“中的name也给改了
所以下面st1重新建立对象时,所得到的name属性也相应的变化了
回复 使用道具 举报
static静态修饰符它随着类的加载而加载,所修饰的存贮在方法区中,而且仅此一份,他不会随着你新建对象而重新新建一个静态变量,所以不管你创建了几个对象,每次调用的静态属性值都是同一个。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主已经把static_用法 类中的name域定义为静态的了,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象,对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,
在st1实例化的时候它引用的仍然是静态变量name的值,并没有被JVM重新分配内存,所以值还是lisi
PS:楼主的编码习惯非常不好,强烈建议改进。类名最好全部用英文字母,譬如你可以这样命名你的类名:static_use
回复 使用道具 举报
其实楼主只要理解一个问题即可 被static修饰的变量即为全局变量 存在于方法区无论你创建几个对象只要未进行重新赋值该值就不会改变。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-12-7 21:21 编辑

static String name;
如题,被static(静态)修饰的变量叫做类变量,类变量一旦被赋值就可以在该类及其调用所共享。
回复 使用道具 举报
大哥,不要使用中文呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马