我有一个单例 Logger
类。
public class Logger {
public static Logger INSTANCE = new Logger();
private Logger() {
...
}
}
我想在我的构造函数中记录一个新实例已创建。所以我的代码看起来像:
public class MyClass {
public MyClass() {
Logger.INSTANCE.log("MyClass created");
...
}
}
我想知道这是否会破坏 MyClass
的静态实例。例如,如果我有:
public class MyOtherClass {
private static MyClass myClass = new MyClass();
...
}
我担心这会由于未定义静态变量的初始化顺序而导致问题。因此,如果 myClass
在 Logger.INSTANCE
之前被初始化,那么 myClass
的构造将会崩溃。是否有某种机制可以防止这种情况发生,或者在构造函数中使用静态变量本身就很危险?在这种情况下,有什么方法可以防止用户创建 MyClass
的静态实例吗?
最佳答案
public class Logger {
public static Logger INSTANCE = new Logger();
private Logger() {
...
}
}
是语法糖
public class Logger {
public static Logger INSTANCE;
static {
INSTANCE = new Logger();
}
private Logger() {
...
}
}
静态 block 设置类的静态成员,并且is guaranteed to run before your class is used .
关于java - 在构造函数中使用单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769880/