黑马程序员技术交流社区

标题: 关于静态变量 [打印本页]

作者: sunalong    时间: 2013-7-15 21:35
标题: 关于静态变量
本帖最后由 杨兴庭 于 2013-7-16 17:50 编辑

关于静态变量的创建,哪一个选项是正确的?(    )
  A.一旦一个静态变量被分配,它就不允许改变
  B.一个静态变量在一个方法中创建,它在被调用的时候值保持不变
  C.在任意多个类的实例中,一个静态变量的实例只存在一个
  D.一个静态的标识符只能被应用于primitive value
  解析:选项A是对常量的描述。
  选项B是为了迷惑那些习惯使用VB的人。
  选项D所说的静态标识符可以被应用到类(但只是一个内部类)、方法和变量中。
  哪位哥们给给出代码示例讲解一下?
  我感觉ABC都对,而D感觉不出来、


作者: 杨增坤    时间: 2013-7-15 23:00
       A.一旦一个静态变量被分配,它就不允许改变
  B.一个静态变量在一个方法中创建,它在被调用的时候值保持不变
  C.在任意多个类的实例中,一个静态变量的实例只存在一个
  D.一个静态的标识符只能被应用于primitive value


我认为只有C正确
public class Demo {
   public static int num=3;
}

public class Text {
        public static void main(String[] args) {
                System.out.println("原来的值:"+Demo.num);
                Demo.num=10;
                System.out.println("改变后的值:"+Demo.num);
        }
}结果:

原来的值:3
改变后的值:10

从结果可以判断出:A和D不正确  静态变量的值是可以被改变的,不能由private来修饰,否则不能有类名.静态变量 调用   如果是final static 声明的变量的值不可以被改变。

public static int getStatic(){
            static int num=5;
            return num;
   }一个方法中不能声明静态的变量,否则编译失败。所以B错误


只要是类加载后,静态变量就在内存中存储,只要是本类调用,就只有这么一个值,其他的类不能调用,

public class Demo {
        public static int num=5;
        public static int getNum() {
                return num;
        }
        public static void setNum(int num) {
                Demo.num = num;
        }       
}

public class Text {
        public static void main(String[] args) {
                Demo d1=new Demo();
                System.out.println("d1--->"+d1.getNum());
                d1.setNum(20);//改变静态变量
                Demo d2=new Demo();
                System.out.println("d2--->"+d2.getNum());
                Demo d3=new Demo();
                System.out.println("d3--->"+d3.getNum());
        }
}

结果:
d1--->5
d2--->20
d3--->20

从结果中可以判断出:C正确。只要其中一个类的对象改变了静态变量的值,其他的对象的静态变量的值也跟着改变,就说明是同一个变量。
希望我的解释对你有帮助!





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