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