静态变量的加载问题

经常会有疑问,一个类的静态变量到底会在什么时候真正创建

今天实验了下,得出如下结论。

一个类的静态变量只会在该类被实例化,或者该类调用了静态变量、静态方法的时候创建。如果该类在其他类中只是定义变量,没有实际操作,静态变量也不会被实例化。


对于单例的饿汉模式,以前一直以为只要容器中有该类,就会创建单例对象,实际上是错误的。如果一个单例类仅仅有创建对象和操作该对象属性的操作,此时用饿汉模式非常好,因为它线程安全。

当然很多时候我们使用框架,通过反射的方式实例化对象了,Class.forName("xxx")使用这种方式加载类,使用newInstance初始化对象,都会初始化静态变量。

如果单例类有其他静态方法的操作,就有可能实例化了不想实例化的对象,造成该资源浪费。

此时可以用双重检查,或者内部类的方式构造性能好的单例



你可能感兴趣的:(静态变量的加载问题)