即使没有static,数据也是存储在静态存储区。加不加static有何区别呢?

解决方案 »

  1.   

    真假,我一直都以为final只是不能被改变,没想到还具有static的功能
      

  2.   

    大神,我是真心求教的啊。final是编译期常量,不是存在常量区吗?
      

  3.   

    final 是不可变啊,static是静态啊。
    比如static String a = "aa";
    此时a可以改变,a="bb";
    但是你static final String a = "aa";
    你要是尝试a="bb";是不行的
      

  4.   

    楼上说了。final 是不可变啊,
      

  5.   

    static修饰的变量是全局变量,在编译期就把内存分好了,可以被类里面的所有方法访问到。而final修饰的是一个常量,经常用final static 来修饰一个静态常量,则这个常量可以全局共享。final一旦修饰一个常量,则这个常量的值就不允许修改。final 不是编译常量,final static才是。
      

  6.   


    static修饰的变量是全局变量这话不对吧。static修饰的变量是类变量,可以直接用类名直接调用。而全局变量只要是定义在函数外的变量不应该都算是全局变量么?即便没有static修饰?
      

  7.   

    明白了,3楼说的对,但是我问的不是static和static final的区别,而是final和static final的区别。final 和static final的区别在于static表示这个常量只有一份。
      

  8.   


    对象还没构造的时候,final就已经被分好空间了,所以他是具有static属性的。在 java in think 中有提到这一点。 
      

  9.   

    加上 static 的  final 常量可以理解为 静态常量  可以通过类名.属性名调用 并且所有实例化这个类的对象公用这一个常量
      

  10.   

    static意为“静态”,是和类相关的概念,即无论他所在的class被实例化了多少个,都只有一个,比如一个类A,里面有个比如static int i,就算你new A()多少次,i都只有一个,所以A.i,x.i,y.i都是同一个i(x,y为A的实例),并且即使所在class没有实例化,也可以通过class名访问,比如上面的A.i。而final可以理解为常量,一旦创建就不能改变的量。
    如果只有final,那么每次你创建一个实例,就会创建一个对应的变量,但只能是创建时初始化,创建完了你就改不了了。
    如果只有static,那么这个变量永远只有一个,但你还是可以改变他的值,根据这个就可以做计数器什么的,给每个实例分配编号之类的。
    如果是final static,说明你一旦创建就不能改变,并且只保留一个,根据这个特性所以很多公用常量可以这么写。