在java中,如果变量是不可变的,那么最终应该是静态类变量吗?
我问,因为每次类的一个实例使用它时创建一个新对象似乎很浪费(因为它始终是相同的)。
示例:
每次调用方法时在方法中创建的变量:
public class SomeClass {
public void someMethod() {
final String someRegex = "\\d+";
final Pattern somePattern = Pattern.compile(someRegex);
...
}
}
创建一次的变量:
public class SomeClass {
private final static String someRegex = "\\d+";
private final static Pattern somePattern = Pattern.compile(someRegex);
public void someMethod() {
...
}
}
使用后一种代码总是更可取吗?
这个答案似乎表明最好使用后一个代码:How can I initialize a String array with length 0 in Java?
答案 0 :(得分:6)
绝对不是。
class MyIntegerContainer{
private final int x;
public MyIntegerContainer(int x){
this.x = x;
}
}
如果你创建了不可变的最终x
静态,那么MyIntegerContainer
的所有实例将共享相同的x
值,这对于一个非常好的数据容器是不可能的。
答案 1 :(得分:1)
最终,这取决于你对这些变量做了什么。
如果变量只有特定方法中的生命周期 - 也就是说,永远不会需要查看它或使用这些值 - 然后声明它们方法内部是恰当和正确的。让它比它需要的更明显只会增加未来维护者(包括你自己)的困惑。
如果变量在类的外部 ,可能有意义地声明它static
。在常量或变量本身不存储任何状态的情况下尤其如此。
如果它不是常数,或者在课堂之外没有任何目的,那么请保持非静态和私密。