我有一个类,它有一个初始化成员变量的init方法。所以我希望执行该代码只对该类的任何数量执行运行一次。那怎么办呢?
如果问题不明确,请告诉我。
编辑:
实际上我有一些遗留代码,其中包含数千个具有大init方法的类。它执行成员变量的初始化(使用所有静态值)。
并假设在一个主要方法中,如果我有任何这些类的引用。我运行主方法100次,然后100次执行相同的方法,这是一个性能命中。所以我想把成员变量作为静态,并且对于任意数量的执行只进行一次初始化。但是我认为它会导致OutOfMemory,因为成千上万的类的所有对象都将保留在jvm中直到它死亡。
希望现在很清楚。
感谢。
答案 0 :(得分:3)
使用静态类方法(不)使用单例反模式。 http://thetechcandy.wordpress.com/2009/12/02/singletons-is-anti-pattern/
答案 1 :(得分:1)
答案 2 :(得分:1)
难道你不能把这个init方法变成一个类方法吗? (在java中,使用“static”关键字)
答案 3 :(得分:0)
所以我希望执行该代码只对该类的任何数量执行运行一次。
我担心没有内置语言功能。你必须使用像
这样的东西来封装它if (!initialized) {
// init ...
initialized = true;
}
(但请确保将此类init
方法声明为synchronized
,这样两个线程都不会因缓存或竞争条件等而初始化对象。)
顺便说一下...... “执行那个类”你的意思有点不清楚。你的意思是“该类的任意数量的实例化”吗?
答案 4 :(得分:0)
1)使用静态块代码:
public class MyClass {
static {
// do your thing here, it gets executed just once at class loading
}
}
2)使用构造函数,正如其他人之前指出的那样