黑马程序员技术交流社区

标题: 关于static的求解决 [打印本页]

作者: 丁一    时间: 2013-3-15 11:01
标题: 关于static的求解决
本帖最后由 丁一 于 2013-3-15 12:26 编辑

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

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



作者: 李思杰    时间: 2013-3-15 11:12
如果你定义了static String country="中国";
那country就被所有对象共享了,没当你建立一个对象,他们的country都是中国
如果你修改了国籍如美国
  1. Person p = new Person();
  2. p.country = “美国";//那就修改的方法区country,之后建立的对象的country就都是美国了
复制代码

作者: wangjinyu501    时间: 2013-3-15 11:14
static在开发中一般用于常量,如果只是一次性改的话可以这样: static String country="改的国籍";如果国籍经常改,你需要变量来做。
作者: HM刘俊    时间: 2013-3-15 11:26
被 static修饰的变量叫成员变量或类变量。
类变量时在程序加载的时候创建的,先于类的所以对象创建。

作者: HM刘俊    时间: 2013-3-15 11:26
你这里是给类变量country赋了一个初始值“中国”及时你不给他赋值,java也会默认的给他赋个初始值。
你下面想调用(改变国籍)country变量。
不需使用对象而可以直接使用类名Person就可以了。
作者: 黑马-王鹏    时间: 2013-3-15 11:44
static的特点:
随着类的加载而加载
被所有对象所共享
优先于对象存在
可以直接被类名所调用
如果你改了国际,肯定就不能定义静态了赛,因为没有被所有对象所共享
静态的应用:每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。
如果你改了国际,就不能对功能进行抽取和封装,而要单独定义功能,所有不仅仅是去除static关键字这么简单,而是要去除整句,重新在具体位置定义功能

作者: 何仕映    时间: 2013-3-15 12:18
static修饰成员变量时,表示该类所有的对象都共享这一个属性,并且该属性的值是一样的。这样做的好处是对对象的共享数据进行单独空间存贮,节省空间。就比如一个班上的学社共享一个黑板。但是像你说的你要修改国籍,说明这个国籍只是该类所有对象应该具有的一个属性,像姓名一样。并不是共享的,所以你不能用static修饰,而是把这个定义成一个属性。
作者: 丁一    时间: 2013-3-15 12:26
如果出现这种情况只能不用 static了……
作者: 何仕映    时间: 2013-3-15 12:52
丁一 发表于 2013-3-15 12:26
如果出现这种情况只能不用 static了……

是的,因为这个国籍变量不是所有人所共享的。只有所有人共享的变量,就是说要变所有人的这个属性都要跟着一起变,才能定义成静态
作者: HM张勇    时间: 2013-3-15 14:03
static修饰成员变量country,就变成了全局共享的变量,只要有对象对country进行赋值,那么country就会改变,因为所有的对象都共享这个数据。如果你想让country改变,就继续static;如果你不想让country改变,就用final来修饰即可




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