在Java中声明类中数组的正确方法是什么

时间:2012-05-11 15:35:04

标签: java arrays constants

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

提供案例的帖子
public static final Strings[] words;

喜欢here

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

private static final Strings[] words;

或只是

private final Strings[] words;

感谢

7 个答案:

答案 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()

使其不可修改