“只有static final成员变量才能保证只被加载一次”,这种说法有道理,但容易造成误解,关键在于楼主是怎么理解“加载”这个概念的。我想说这话的人是考虑,非final的成员是可以被更改的,所以: class Foo { static Object o = new Object(); static { o = new Object(); } static final Object of = new Object(); } 这里的o就被初始化了两次,而of就不存在这种情况。但确切的说,“初始化”和“加载”的含义是不同的。个人认为,属性的“加载”应该是指构造变量表,那么,这种加载只执行一次。后期对变量进行的更改不应算“加载”期间的工作。
静态的代码块只在类被加裁时执行一次,只后不会再被执行。你说的static成员加载是什么意思啊?初始化的意思?
static final确实只初始化一次
class Foo {
static Object o = new Object();
static {
o = new Object();
}
static final Object of = new Object();
}
这里的o就被初始化了两次,而of就不存在这种情况。但确切的说,“初始化”和“加载”的含义是不同的。个人认为,属性的“加载”应该是指构造变量表,那么,这种加载只执行一次。后期对变量进行的更改不应算“加载”期间的工作。
final定义的变量可以看做一个常量,不能被改变;
final定义的方法不能被覆盖; (即不允许修改,还是不能改变的)
final定义的类不能被继承。 (也是不能改变)
所以两个一起就表示这个成员只能被初始化一次,定义的变量相当于常量,定义的方法不能被覆盖通俗点说,只能初始化一次是static的属性,加载一次是final的属性
但域值可以改变 不像final
老紫竹
等 级:
发表于:2008-02-13 19:21:425楼 得分:0
static 只表示这个变量是在各个类之间共享的,只有一份。 没有任何其他意思。 OVER! 同意java2000_net说的,static 目的就是共享,再加上final 就是不能被更改的共享。