我的静态变量存活了多长时间?

stw*_*sel 5 java static-methods

我有一个类看起来像:

  public class BadCodeStyle {

     private static String theAnswer = null;

     public static void setAnswer(String whatsNew) {
         theAnswer = whatsNew;
     }

     public static String getAnswer() {
          return (theAnswer == null) ? "I don't know" : theAnswer;
     }            

  }
Run Code Online (Sandbox Code Playgroud)

当然这是实际课程的简化.真正发生的是静态方法如果变量为null则检索框架对象.设置变量只是为了在测试运行中插入一个模拟值,我希望将代码与框架隔离开来(为可测试性改造代码很有趣 - 就像戳你自己的眼睛类型的乐趣一样).

当我这样做时BadCodeStyle.setAnswer("42"),静态方法的行为类似于Singleton(?).我确实阅读了类加载器的解释并得出结论:只要加载了类,变量就会保留,只要JVM运行就可以了.那是对的吗?

Ted*_*opp 7

只要加载类定义,静态类变量就会存在.这通常是在VM退出之前.但是,还可以通过其他方式卸载类.例如,请参阅此主题和此主题.

  • @MikeB - 如果类是由自定义类加载器加载的,并且没有从任何实时代码引用到自定义加载器或它加载的任何内容,那么加载器和类将受到垃圾收集,如两者所述我链接的线程. (2认同)