以前学习java的时候认为一个类中的static成员只会在这个类第一次使用的时候被加载。但昨天在网上看到一篇文章说只有static final成员变量才能保证只被加载一次。是这样吗?

解决方案 »

  1.   

    用static来修饰一段代码(称为静态代码块) 
    静态的代码块只在类被加裁时执行一次,只后不会再被执行。你说的static成员加载是什么意思啊?初始化的意思?
    static final确实只初始化一次
      

  2.   

    “只有static final成员变量才能保证只被加载一次”,这种说法有道理,但容易造成误解,关键在于楼主是怎么理解“加载”这个概念的。我想说这话的人是考虑,非final的成员是可以被更改的,所以:
    class Foo {
      static Object o = new Object();
      static {
        o = new Object();
      }
      static final Object of = new Object();
    }
    这里的o就被初始化了两次,而of就不存在这种情况。但确切的说,“初始化”和“加载”的含义是不同的。个人认为,属性的“加载”应该是指构造变量表,那么,这种加载只执行一次。后期对变量进行的更改不应算“加载”期间的工作。
      

  3.   

    static表示该域只能初始化一次
    final定义的变量可以看做一个常量,不能被改变; 
               final定义的方法不能被覆盖; (即不允许修改,还是不能改变的)
               final定义的类不能被继承。 (也是不能改变)
    所以两个一起就表示这个成员只能被初始化一次,定义的变量相当于常量,定义的方法不能被覆盖通俗点说,只能初始化一次是static的属性,加载一次是final的属性
      

  4.   

    static 只表示这个变量是在各个类之间共享的,只有一份。 没有任何其他意思。OVER!
      

  5.   

    static final型就当成常量好了,这样便于理解- -
      

  6.   

    在类被加载的时候有且只有一次分配静态存储空间
    但域值可以改变 不像final
      

  7.   

     java2000_net
    老紫竹 
    等 级:
     发表于:2008-02-13 19:21:425楼 得分:0 
    static   只表示这个变量是在各个类之间共享的,只有一份。   没有任何其他意思。 OVER! 同意java2000_net说的,static 目的就是共享,再加上final 就是不能被更改的共享。