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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁一 中级黑马   /  2013-3-15 11:01  /  1715 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁一 于 2013-3-15 12:26 编辑

写blog的时候发现个问题。如果定义person的国籍为 我们用 static String country="中国";后来我改国籍了这个怎么处理?是不是就不能用static了

class Person
{
        static String country="中国";
        ...
        ...
}


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
如果你定义了static String country="中国";
那country就被所有对象共享了,没当你建立一个对象,他们的country都是中国
如果你修改了国籍如美国
  1. Person p = new Person();
  2. p.country = “美国";//那就修改的方法区country,之后建立的对象的country就都是美国了
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
static在开发中一般用于常量,如果只是一次性改的话可以这样: static String country="改的国籍";如果国籍经常改,你需要变量来做。
回复 使用道具 举报
被 static修饰的变量叫成员变量或类变量。
类变量时在程序加载的时候创建的,先于类的所以对象创建。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你这里是给类变量country赋了一个初始值“中国”及时你不给他赋值,java也会默认的给他赋个初始值。
你下面想调用(改变国籍)country变量。
不需使用对象而可以直接使用类名Person就可以了。
回复 使用道具 举报
static的特点:
随着类的加载而加载
被所有对象所共享
优先于对象存在
可以直接被类名所调用
如果你改了国际,肯定就不能定义静态了赛,因为没有被所有对象所共享
静态的应用:每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。
如果你改了国际,就不能对功能进行抽取和封装,而要单独定义功能,所有不仅仅是去除static关键字这么简单,而是要去除整句,重新在具体位置定义功能
回复 使用道具 举报
static修饰成员变量时,表示该类所有的对象都共享这一个属性,并且该属性的值是一样的。这样做的好处是对对象的共享数据进行单独空间存贮,节省空间。就比如一个班上的学社共享一个黑板。但是像你说的你要修改国籍,说明这个国籍只是该类所有对象应该具有的一个属性,像姓名一样。并不是共享的,所以你不能用static修饰,而是把这个定义成一个属性。
回复 使用道具 举报
丁一 中级黑马 2013-3-15 12:26:13
8#
如果出现这种情况只能不用 static了……
回复 使用道具 举报
丁一 发表于 2013-3-15 12:26
如果出现这种情况只能不用 static了……

是的,因为这个国籍变量不是所有人所共享的。只有所有人共享的变量,就是说要变所有人的这个属性都要跟着一起变,才能定义成静态
回复 使用道具 举报
static修饰成员变量country,就变成了全局共享的变量,只要有对象对country进行赋值,那么country就会改变,因为所有的对象都共享这个数据。如果你想让country改变,就继续static;如果你不想让country改变,就用final来修饰即可
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马