I have a Singleton Logger
class.
public class Logger {
public static Logger INSTANCE = new Logger();
private Logger() {
...
}
}
I want to log in my constructor that a new instance is created. So my code looks like:
public class MyClass {
public MyClass() {
Logger.INSTANCE.log("MyClass created");
...
}
}
I am wondering if this could break static instances of MyClass
. For instance, if I have:
public class MyOtherClass {
private static MyClass myClass = new MyClass();
...
}
I fear that this could cause a problem due to undefined order of initialization of static variables. So if myClass
is initialized before Logger.INSTANCE
is, then the construction of myClass
will crash. Is there some mechanism to prevent this from happening or is using static variables in a constructor inherently dangerous? Is there any way to prevent users from creating static instances of MyClass
in such a case?