在类中声明常量数组的正确方法是什么?我已经阅读了 ppl 为之辩护的帖子
public static final Strings[] words;
喜欢这里
但是,我发现将变量声明为公开,这意味着用户(测试人员)可以看到变量;即使,他不能改变它们,因为它们是最终的......任何人都可以解释为什么我应该声明上述常量而不是
private static final Strings[] words;
要不就
private final Strings[] words;
谢谢
通常你不应该在 Java 中使用数组,除非你真的需要性能。
您应该使用 a Collection(或 aList如果它已订购)。
对于一个公共常数,
public static final Collection<String> FIXED_STRINGS = Collections.unmodifiableCollection(Arrays.asList("string1","string2"));
或者private,如果它不用于课堂外。
您指向的示例谈论公共String常量,而不是 public String[]。
你无法做到String[]一成不变。 final仅表示用户不能将参考点指向不同的对象。它不会阻止用户更改数组的内容。(在 Java 中与在 C++final中非常不同(并且没有那么强大) )。const
至于是否static应该在那里,记住区别是什么。使用static,该成员将由该类的所有实例共享。如果没有 ,static类的每个实例中都会有一个单独的成员副本。
通常,当某些东西是浪费的真正常数时,static通常在这种情况下使用。
由于String [] words是最终的,您可以将其初始化一次,即如果您说 string [] words=new string[5] 或者您以任何其他方式对其进行了初始化,但是一旦初始化,您就无法使其引用其他字符串实例大批。但它的元素是可以改变的。
例如 words[0]="string1" 可以更改为 words[0]="string2" 如果您说
private static final string[] words 那么 words 将成为类变量并且可以在类内访问。
如果你说
private final string [] words 那么 words 将成为实例变量并且可以在类中访问
如果你说 variable as public 那么它可以在类外部访问并且它的元素可以被任何人修改。
建议
1.使用枚举
2. 使用列表并使用 Collections.unmodifiableList() 使其不可修改
它只是取决于你想做什么,就像任何面向对象的概念一样。
public/private/... 是您要向您的成员/方法声明的访问权限。
BTW final 表明一旦初始化就不能更改变量。static 意味着类的所有实例都将具有相同的变量。
总之一切皆有可能。
我更喜欢使用枚举来声明常量:
public enum Words {
ONE("one"),
TWO("two");
private String title;
private Words(String title){
this.title = title;
}
public String getTitle() {
return title;
}
}
使用起来非常方便(Words.ONE),您可以将其他属性与每个属性(标题等)相关联。
您还可以通过调用 Words.values(); 来获取常量数组;
不鼓励将类变量声明为 public,因为它没有明确说明它们是类变量。
它还向其他编写依赖于该特定类变量的代码的人开放您的类。
您知道 static 或 final 关键字的作用吗,因为它没有显示在您的问题中!
首先阅读静态和最终!
它应该是静态最终的,因为只有它才会真正具有作为常数的意义!
顺便说一句,“字符串”?