2014-04-10 113 views
2

我想聲明一些靜態變量並在我的代碼中使用它們,因此在此示例中,如果我想更改電話號碼,我將在一個地方更改它:我應該使用靜態方法還是靜態字段

public class AppInformation{ 
    static String phone_number="44444444"; 
} 

所以現在我可以通過調用該類獲取phone_number: AppInformation.phone_number;

另一種解決方案:

public class AppInformation { 

    public static String get_phone_number(){ 
     return "44444444"; 
    } 
} 

現在我可以調用該方法: AppInformation.get_phone_number();

其實我更喜歡第二種方法,因爲它是線程安全的!

這是正確的嗎?還有其他建議嗎?

+0

如果程序沒有改變數字,第一個是線程安全的 - 雖然你不能通過查看它來證明它是線程安全的,你可以用第二個來證明它。如果程序確實改變了數字,第二個將不起作用。 – immibis

+0

所以我應該聲明它爲私有靜態最終字符串PHONE_NUMBER!如下所述。 – user3516596

回答

5

聲明爲public static final String PHONE_NUMBER = "44444444"。既然你只能讀這個變量,它是線程安全的。

爲什麼我將它命名爲PHONE_NUMBER,而不是phoneNumber(或破壞我所知的Java約定phone_number),解釋爲here

+0

aaa,所以沒有最終它不是線程安全的是正確的? – user3516596

+0

@ user3516596沒有'final'線程可以寫入它(以後再讀取它)。如果你不提供任何同步 - 它不是(線程)安全的。 –

+0

是的,謝謝 – user3516596

1

你可以聲明它爲

static final string phone_number =「44444444」; 而不用擔心線程安全的了:)

1

你所說的是你要一個常量,它在Java中,這樣通常表示:

public class AppInformation 
{ 
    public static final String PHONE_NUMBER = "44444444"; 
} 

注意,在你的榜樣,你已經錯過了:

  • access modifier,它在一個類的情況下意味着該值將是封裝私有的。
  • final keywork,這意味着該值可以在程序運行時修改。
+0

我應該聲明它是公共的還是私人的?\ – user3516596

+0

取決於你希望它可見的位置 - 如果'PHONE_NUMBER'只用在'AppInformation'類中,那麼它應該是'private';然而,如果您打算在整個應用程序中使用PHONE_NUMBER,那麼它應該是「公共」的。相同的邏輯如下,對於'protected'和* package private *(請參閱我在答案中提到的訪問修飾符鏈接) –

+0

是的非常感謝您非常有幫助,所以我認爲我會將其聲明爲private,因爲我只是由他們自己調用它,我的意思是AppInformation.PHONE_NUMBER。 :) – user3516596

相關問題