我有一個奇怪的情況,我希望能夠在內存中保存一個變量..就像我可以在JVM中插入一個全局變量。java - 如何在JVM中保留變量
這可能嗎?我記得在大學裏做了類似的事情,但是無法通過Google搜索找到它。我有一個邏輯問題,有一些人爲約束,使這個最好的解決方案。
編輯1:
我將需要更新變量的值。
編輯2:
我很欣賞這些回覆傢伙。我是一名.NET程序員,從大學以來就沒有使用過Java。再次感謝。
我有一個奇怪的情況,我希望能夠在內存中保存一個變量..就像我可以在JVM中插入一個全局變量。java - 如何在JVM中保留變量
這可能嗎?我記得在大學裏做了類似的事情,但是無法通過Google搜索找到它。我有一個邏輯問題,有一些人爲約束,使這個最好的解決方案。
編輯1:
我將需要更新變量的值。
編輯2:
我很欣賞這些回覆傢伙。我是一名.NET程序員,從大學以來就沒有使用過Java。再次感謝。
是,使用static
場:但是
public class GlobalVariableHolder {
public static int globalVariable;
}
注意的是,這被認爲是不好的做法,並可能導致那些難以調試意想不到的效果。不使用全局變量的方法是將其作爲參數或方法傳遞給需要它的地方。
如果您仍然確定需要此功能,爲了儘可能地保護您自己,請使用同步功能。更好的是,如果變量將是原始的(int
,long
等),您可以使用AtomicInteger
的getAndAdd()
或addAndGet()
方法。
你的意思是跨多個java.exe調用存在的東西,還是你的意思是一個單一的變量,將在內存中的相同位置,而不管java.exe中的哪個線程訪問它?或者您的意思是隻有在使用JRockit時才能訪問的變量?或者也許只是開發機器上的JVM,而不是其他系統上的JVM?
在第一種情況下,您需要另一種方式來存儲它,如配置文件。
在第二種情況下,就像Bozho說的那樣,使用static
關鍵字。
在第三種情況下,您可能需要使用System類並確定JVM製造商(假設可以從System獲得 - 我不確定關閉了我的頭頂,自己查找API)。
在第四種情況下,你幾乎回到了配置文件。
它不會贏得任何獎項,但這應該工作:
package mypackage;
public class MyGlobal { public static String MY_GLOBAL_VAR = "my variable"; }
該JVM實例中的任何類都將能夠訪問MyGlobal.MY_GLOBAL_VAR。
不需要大寫 - 它不是一個常數。 – Bozho 2010-09-07 17:55:09
確實如此,但在我編輯它之前它是不變的:) – 2010-09-07 21:49:06
通常情況下,您最終會將這些東西存儲在某種全局類中 - 這是一個可以從任何地方訪問並具有受控數量的實例的類。
單身人士通常用於此。如果你查看單身人士的模式,並將你的變量存儲在這個單身人士中(添加一個setter和一個getter),你就在前進。
這樣做(與公共靜態變量相反)會爲您提供某種級別的訪問控制和可跟蹤性 - 例如,如果發現獲取的結果不可預知,則可以將調試語句放在getter中。
從長遠來看,setter和getters以及singleton都是不好的代碼氣味,但是不會像可設置的公共變量那樣糟糕。
稍後,您可能想要將操縱該變量的代碼移動到單例對象中,並可能將單例轉換爲您可以通過IOC獲取的東西,但單身人士比起使用公共靜態更適合開始。
爲什麼要結束投票?這完全是一個真正的問題。 – 2010-09-07 17:43:15