2012-05-11 31 views
0

在類中聲明常量數組的正確方法是什麼?我看了帖子裏PPL充分的理由在Java的類中聲明數組的正確方法是什麼

public static final Strings[] words; 

here

然而

,我發現,聲明你的變量公開,這意味着用戶(測試)可以看到變量;儘管如此,他還是無法改變他們,因爲他們是最終的...任何人都可以解釋爲什麼我應該聲明以上常量而不是

private static final Strings[] words; 

或只是

private final Strings[] words; 

感謝

+4

什麼是變量被用來做什麼? –

回答

0

它只取決於你想做什麼,就像任何面向對象的概念一樣。

public/private/...是您想要向您的成員/方法聲明的訪問權限。

順便說一句,表明你一旦初始化就不能改變變量。 靜態意味着該類的所有實例將具有相同的變量。

總之一切皆有可能。

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()來獲得常量數組。

+0

這與聲明數組無關。 –

+0

是的。您可以在枚舉上調用.values()以獲取所有枚舉值的數組。 –

0

聲明一個類變量public不鼓勵,因爲它沒有說明它們是類變量。

它也向其他人開放你的類,編寫將依賴於特定類變量的代碼。

1

你指出的例子是關於公共String常量的例子,而不是公共String[]

您不能讓String[]不可更改。 final僅意味着用戶不能將參考點指向不同的對象。它不會阻止用戶更改數組的內容。 (Java中的final與C++中的const有很大的不同(並且功能更強大))。

至於static應該在那裏,請記住它們之間的區別。通過static,該成員將由該類的所有實例共享。如果沒有static,那麼在該類的每個實例中都會有一個單獨的副本。

一般而言,當某物是一個真正的常量時是浪費的,所以在這種情況下通常使用static

4

通常情況下,你不應該在Java中使用數組,除非你真的需要性能。

您應該使用Collection(或者List,如果它是有序的)。

對於公共常數,

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

或者private,如果不是在類外使用。

+0

如果你打算讓它變得不可修改,爲什麼要打擾收藏?在這一點上,你可以節省自己的努力和JVM的時間,只是用'public static final String [] STRINGS = {「string1」,「string2」};' –

+4

@ josh.trow不能使數組不可變,所以有人可以做'STRINGS [1] =「badString」' – artbristol

0

你知道static或final關鍵字的作用嗎,因爲它不會在你的問題中顯示!

閱讀關於static & final first!

應該靜態最終因爲那麼只有它會實際持有一些 意義,作爲一個不斷!

順便說一句,「弦」??

0

由於的String []的話是最終的,如果你說你可以初始化一次即串[]字=​​新的字符串[5] 或者你初始化任何其他方式,但一旦它的初始化,你不能使它引用字符串數組的其他實例。 但其元素可以更改。
如果你說
私有靜態最終字符串[]字,那麼單詞將變成類變量,並且可以在類中訪問。
如果你說
private final string [] words那麼單詞將變成實例變量,並且可以在類
中訪問,如果你說變量是公共的,那麼它可以訪問外側類,並且它的元素可以被任何一個修改。
建議
1.使用枚舉
2.使用清單,並使其不可修改使用Collections.unmodifiableList()

相關問題