我有一个奇怪的情况,我希望能够在内存中保存变量..就像我可以在JVM中固定的全局变量。
这可能吗?我记得在大学里做过类似的事情,但谷歌搜索无法找到它。我有一个逻辑问题,有一些人为限制,使这成为最好的解决方案。
编辑1:
我需要更新变量的值。
编辑2:
我很欣赏回应的人。我是一名.net程序员,从大学开始就没用过java。再次感谢。
答案 0 :(得分:5)
是的,使用static
字段:
public class GlobalVariableHolder {
public static int globalVariable;
}
但请注意,这被认为是一种不好的做法,可能会导致难以调试的意外结果。不使用全局变量的方法是将其作为参数或方法传递给您。
如果您仍然确定需要这个,为了尽可能地保护自己,请使用同步。更好的是,如果变量是原始的(int
,long
等),您可以使用AtomicInteger
的getAndAdd()
或addAndGet()
方法。
答案 1 :(得分:2)
通常,您最终会将这些内容存储在某种全局类中 - 这个类可以从任何地方访问,并且具有受控制的实例数。
单身人士常用于此。如果您查找单身人士的模式并将变量存储在该单身人士中(添加一个setter和一个getter),那么您就可以了。
执行此操作(与公共静态变量相反)将为您提供一定程度的访问控制和可跟踪性 - 例如,如果您发现无法获得不可预测的结果,则可以将调试语句放入getter中。
从长远来看,setter and getters和singletons都是糟糕的代码味道,但没有可设置的公共变量那么差。
稍后您可能希望将操纵该变量的代码移动到单个对象中,并可能将单例转换为您可以通过IOC获取的内容,但是使用单例是一个比使用公共静态更好的起点。 / p>
答案 2 :(得分:1)
你的意思是在java.exe的多次调用中会存在什么,或者你是指一个单独的变量,它将在内存中的相同位置,而不管java.exe中的哪个线程访问它?或者你的意思是只有在你使用JRockit时才能访问的变量?或者也许只是开发机器上的JVM,而不是另一个系统上的JVM?
在第一种情况下,您需要另一种方式来存储它,例如配置文件。
在第二种情况下,就像Bozho所说,使用static
关键字。
在第三种情况下,您可能需要使用System类并确定JVM制造商(假设可以从System获得 - 我不确定是否在我的头顶,您将通过查看了解更多信息自己创建API。
在第四种情况下,你几乎回到配置文件。
答案 3 :(得分:0)
它不会赢得任何奖项,但这应该有效:
package mypackage;
public class MyGlobal {
public static String MY_GLOBAL_VAR = "my variable";
}
该JVM实例中的任何类都可以访问MyGlobal.MY_GLOBAL_VAR。