2016-07-29 94 views
1

據我所知,System.setProperty(「key」,」value」)System.getProperty(「key」)用於保存和檢索系統屬性和用戶定義的屬性。設置的值可以在應用程序的任何地方訪問。System.setProperty或公共靜態變量?

另外,我知道,當一個變量被聲明爲publicstatic時,它變成一個常量,並在應用程序中的任何地方都可用。

我想知道2這是有利的和更好的選擇。我能想到的一個方面是當我們想要在xml文件中使用$ {key}檢索一個值時,System.setProperty非常有用。使用公共靜態變量無法實現同樣的效果。

我的問題是

  1. 是否還有其他的好處?
  2. 哪一個更好?
  3. 在System.setProperty/getProperty和公共靜態變量上應該使用哪些場景?

在此先感謝。

+1

看起來很寬泛,但恕我直言**不要**以這種方式使用'System.getProperty':如您所說,您可以使用'public static final'變量創建一個Constants類。你也可以定義一個屬性文件和'Map'到一個具有鍵值的對象中。...... –

+0

感謝你的回覆,我完全同意我們可以使用**屬性**文件或**地圖** [_事實上,這就是我這些年來一直在做的事情。但是,我沒有看到爲什麼不應該使用** System.getProperty **來代替的具體原因。請建議。謝謝。你可以用 – Andy

+1

,但這是對System.getProperty的誤解。它**應該**用於存儲系統的屬性。 –

回答

0

安裝人員可以進一步測試。就像對空測試,對壞值等試驗......

二傳手通常是一個更好的選擇,然而,如果沒有塞特斯一類可能是更好的,不給摧毀你的程序的用戶方式

public static Variable variable; 

//In other file 
variable = null; 

和公共靜態變量不是線程安全可言!(也許,如果它是原子)

除非有東西處理我真要發生了很大變化,像的Vector2D/3D我從來沒有使用公靜態的(在這種情況下,它不是靜態的,因爲它不是靜態的)。爲了補充這一點,我只做到這一點,因爲用戶不能將x,y,z清零,因爲它是float/int。通常我會按照我想要的方法去做,而不是簡單的Setters。

(例如:不是一個很好的例子,但我認爲這顯示了我的意思,而不是使用Person.setState(State.EATING)的Person.eat()。)

0

當你運行一個Java程序,你是實際啓動一個JVM實例。該實例將擁有自己的系統屬性。這是你可以放置你的物業的地方。當你運行另一個程序時,它將擁有它自己的系統屬性。

Properties對象是哈希表的子類型,它也是線程安全的。但是,如果您想使用公共靜態變量,則還必須處理多線程程序中的同步訪問。

+0

感謝您的回覆。我明白了你的觀點,但是我的問題是,使用System.setProperty/getProperty來存儲**和**鍵值對** ** _而不是** _聲明爲_public_和_static_的地圖或屬性。 – Andy