在java中创建单例类的最佳/正确方法是什么?
我发现的一个实现是使用私有构造函数和getInstance()方法.
package singleton;
public class Singleton {
private static Singleton me;
private Singleton() {
}
public static Singleton getInstance() {
if (me == null) {
me = new Singleton();
}
return me;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在以下测试用例中实现失败了
package singleton;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Test {
/**
* @param args
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
InstantiationException, IllegalAccessException, …Run Code Online (Sandbox Code Playgroud) 我知道这个话题已被一遍又一遍地讨论和杀死,但我仍有一个疑问,我希望有人可以帮助我或指导我在SO上预先存在的帖子.
在传统的C中,静态变量存储在数据段中,局部变量存储在堆栈中.与局部变量相比,我认为这会使静态变量的存储和维护成本更高.对?
当试图用Java或C#来理解时,与单例类相比,这对于静态类是不利的吗?由于整个类在类初始化之前被加载到内存中,所以除非我们有小的内联函数,否则我看不出它有什么优势.
我喜欢Singleton课程,并且不愿意看到它成为一种反模式,我仍然在寻找它带来的所有优点......然后松散于其他人的线程安全论证.
-Ivar
我的目标是Properties在我的类中有一个私有静态对象,在创建Properties我的应用程序所需的其他对象时充当默认对象.当前的实现如下所示:
public class MyClass {
private static Properties DEFAULT_PROPERTIES = new Properties();
static {
try {
DEFAULT_PROPERTIES.load(
MyClass.class.getResourceAsStream("myclass.properties"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
看着它,它有效,但感觉不对.
你会怎么做?