黑马程序员技术交流社区

标题: static的应用 有点 不解? [打印本页]

作者: 魏冬    时间: 2012-12-6 23:17
标题: static的应用 有点 不解?
为什么st .name="lisi"  st1.name没有赋值啊  怎么打印的都是lisi呢?  谁能给我解释一下呢?

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

QQ截图20121206231026.png

作者: 吴刚    时间: 2012-12-6 23:25
楼主,字符串的类已经复写了Object的tostring方法,所以System.out.println()的时候是可以直接输出lisi的,这个你可以查查java的API的,
作者: 周同欢    时间: 2012-12-6 23:28
static_用法 st = new static_用法()  
st.name = "lisi"   关键就是这句   这句的意思就相当于将"lisi"这个值赋给了st.name  而st.name中的name就是引用的static_用法中的
你这么一赋 就将"static_用法“中的name也给改了
所以下面st1重新建立对象时,所得到的name属性也相应的变化了
作者: 张其辉    时间: 2012-12-6 23:55
static静态修饰符它随着类的加载而加载,所修饰的存贮在方法区中,而且仅此一份,他不会随着你新建对象而重新新建一个静态变量,所以不管你创建了几个对象,每次调用的静态属性值都是同一个。
作者: 魏秀盛    时间: 2012-12-7 00:05
楼主已经把static_用法 类中的name域定义为静态的了,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象,对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,
在st1实例化的时候它引用的仍然是静态变量name的值,并没有被JVM重新分配内存,所以值还是lisi
PS:楼主的编码习惯非常不好,强烈建议改进。类名最好全部用英文字母,譬如你可以这样命名你的类名:static_use
作者: 郁闷    时间: 2012-12-7 14:30
其实楼主只要理解一个问题即可 被static修饰的变量即为全局变量 存在于方法区无论你创建几个对象只要未进行重新赋值该值就不会改变。
作者: 奋斗的青春    时间: 2012-12-7 21:18
本帖最后由 吴愿涛 于 2012-12-7 21:21 编辑

static String name;
如题,被static(静态)修饰的变量叫做类变量,类变量一旦被赋值就可以在该类及其调用所共享。

作者: 戴进飘    时间: 2012-12-7 23:24
大哥,不要使用中文呀




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