私人决赛场是否也应该是静态的?

Eko*_*Eko 0 java static

我想知道,如果我班上有这个领域:我private final int foo = ...应该把它放在静态private static final int foo = ...吗?因为如果它是静态的,它对我班级的所有实例都是通用的,并且永远不会改变.

有没有理由不把它放在静态?或者我必须把它放在静态?

小智 7

如果你的类的每个实例都应该具有相同的foo不可变值,那么你应该使foo为final和static.如果你的类的每个实例都有一个不同的(但仍然是不可变的)foo值,那么该值应该是final.

但是,如果您的类的每个实例都应该具有相同的foo不可变值,那么它实际上是一个常量.按照惯例,通常编码如下:

private static final int FOO = ...

注意帽子表示一个常数......


Moh*_*san 5

如果你在 中启动它的值, 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会被创建一次。