在类中声明常量数组的正确方法是什么?我已经阅读了ppl为
提供案例的帖子public static final Strings[] words;
喜欢here
但是,我发现将变量声明为public,这意味着用户(测试人员)可以看到变量;尽管如此,他不能改变它们,因为它们是最终的...任何人都可以解释为什么我应该声明上面的常数而不是
private static final Strings[] words;
或只是
private final Strings[] words;
感谢
答案 0 :(得分:4)
通常你不应该在Java中使用数组,除非你真的需要性能。
您应该使用Collection
(或List
,如果已订购)。
对于公共常量,
public static final Collection<String> FIXED_STRINGS = Collections.unmodifiableCollection(Arrays.asList("string1","string2"));
或private
,如果它不在课外使用。
答案 1 :(得分:1)
您指出的示例谈论公开String
常量,而非公开String[]
。
您无法使String[]
无法更改。 final
仅表示用户无法将引用点指向其他对象。它不会阻止用户更改数组的内容。 (final
在Java中与C ++中的const
非常不同(并且功能较弱)。
至于static
是否应该存在,请记住其中的区别。使用static
,该成员将由该类的所有实例共享。如果没有static
,则在该类的每个实例中都会有一个单独的成员副本。
通常情况下,某些东西是真正的常量是浪费的,因此在这种情况下static
通常会被使用。
答案 2 :(得分:0)
这取决于你想要做什么,就像任何面向对象的概念一样。
public / private / ...是您要向您的成员/方法声明的访问权限。
BTW final表示初始化后无法更改变量。 static意味着类的所有实例都具有相同的变量。
总之,一切皆有可能。
答案 3 :(得分:0)
我更喜欢使用枚举来声明常量:
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();
来获取常量数组答案 4 :(得分:0)
不鼓励声明类变量public,因为它没有说明它们是类变量。
它还会向其他人编写类,这些代码将依赖于特定的类变量。
答案 5 :(得分:0)
你知道static或final关键字的作用,因为它没有显示在你的问题中!
了解静态&amp;最后的第一个!
是的,“字符串”??它应该是静态最终,因为它只会实际拥有一些 意味着成为一个常数!
答案 6 :(得分:0)
由于 String []词是最终的,你可以初始化它,如果你说string [] words = new string [5]
或者你以任何其他方式初始化它,但一旦初始化你就不能让它引用一些其他字符串数组的实例。
但它的元素可以改变。
示例单词[0] =“string1”可以更改为单词[0] =“string2”
如果你说
私有静态最终字符串[]单词,那么单词将成为类变量,并且可以在类中访问
如果你说
私有的最终字符串[]单词,那么单词将成为实例变量,并且可以在类中访问
如果你把变量称为public,那么它可以在side class中访问,并且它的元素可以被任何一个修改。
的建议强>
1.使用枚举
2.使用list并使用Collections.unmodifiableList()