我想知道,如果我班上有这个领域:我private final int foo = ...
应该把它放在静态private static final int foo = ...
吗?因为如果它是静态的,它对我班级的所有实例都是通用的,并且永远不会改变.
有没有理由不把它放在静态?或者我必须把它放在静态?
小智 7
如果你的类的每个实例都应该具有相同的foo不可变值,那么你应该使foo为final和static.如果你的类的每个实例都有一个不同的(但仍然是不可变的)foo值,那么该值应该是final.
但是,如果您的类的每个实例都应该具有相同的foo不可变值,那么它实际上是一个常量.按照惯例,通常编码如下:
private static final int FOO = ...
注意帽子表示一个常数......
如果你在 中启动它的值, constructor
那么它不应该static
像
private final int foo;
public MyClass(int m){
foo=m;
}
Run Code Online (Sandbox Code Playgroud)
因为它的值取决于入口值。
但是如果你内联启动它的值
private final int foo = 100;
Run Code Online (Sandbox Code Playgroud)
那么它最好static
只有一个实例,因为该final
字段将在类的每个实例上创建;但static
会被创建一次。