0

在类中声明常量数组的正确方法是什么?我已经阅读了 ppl 为之辩护的帖子

public static final Strings[] words;

喜欢这里

但是,我发现将变量声明为公开,这意味着用户(测试人员)可以看到变量;即使,他不能改变它们,因为它们是最终的......任何人都可以解释为什么我应该声明上述常量而不是

private static final Strings[] words;

要不就

private final Strings[] words;

谢谢

4

7 回答 7

4

通常你不应该在 Java 中使用数组,除非你真的需要性能。

您应该使用 a Collection(或 aList如果它已订购)。

对于一个公共常数,

public static final Collection<String> FIXED_STRINGS = Collections.unmodifiableCollection(Arrays.asList("string1","string2"));

或者private,如果它不用于课堂外。

于 2012-05-11T15:42:28.180 回答
1

您指向的示例谈论公共String常量,而不是 public String[]

你无法做到String[]一成不变。 final仅表示用户不能将参考点指向不同的对象。它不会阻止用户更改数组的内容。(在 Java 中与在 C++final中非常不同(并且没有那么强大) )。const

至于是否static应该在那里,记住区别是什么。使用static,该成员将由该类的所有实例共享。如果没有 ,static类的每个实例中都会有一个单独的成员副本。

通常,当某些东西是浪费的真正常数时,static通常在这种情况下使用。

于 2012-05-11T15:39:37.020 回答
0

由于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() 使其不可修改

于 2012-05-11T15:57:12.627 回答
0

它只是取决于你想做什么,就像任何面向对象的概念一样。

public/private/... 是您要向您的成员/方法声明的访问权限。

BTW final 表明一旦初始化就不能更改变量。static 意味着类的所有实例都将具有相同的变量。

总之一切皆有可能。

于 2012-05-11T15:38:09.977 回答
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(); 来获取常量数组;

于 2012-05-11T15:38:29.880 回答
0

不鼓励将类变量声明为 public,因为它没有明确说明它们是类变量。

它还向其他编写依赖于该特定类变量的代码的人开放您的类。

于 2012-05-11T15:39:00.193 回答
0

您知道 static 或 final 关键字的作用吗,因为它没有显示在您的问题中!

首先阅读静态和最终!

它应该是静态最终的,因为只有它才会真正具有作为常数的意义!

顺便说一句,“字符串”?

于 2012-05-11T15:42:37.187 回答