静态变量的生命周期是多少

lea*_*ner 1 java static

在下面的代码中,Nail的引用是否会ypaw在我退出该方法时立即结束,someMethod或者是否存在泄漏的可能性?另外,一旦我退出类Dog,所有引用都ypaw消失了还是 Nail 中的静态引用会导致麻烦?请注意,ypawmPaw是同一个对象,我想知道由于静态引用,该对象在内存中存在多长时间。当然,假设垃圾收集器在适当的时间执行。

Class Dog{

  private Paw ypaw;
  //…..

  public void someMethod(){
    Nail nail = Nail.getInstance(ypaw);
  }
}


Class Nail{
  private static Paw mPaw;

  public static Nail getInstance(Paw p){
    mPaw = p;
    return new Nail();
  }
  //…. other stuff
}
Run Code Online (Sandbox Code Playgroud)

编辑

我的意思是说我有一个 Dog as 的单个实例,myDog而我的单个实例Nail是 through myDog。发生什么mPawmyDog模具(即是gc'ed)?

Jon*_*eet 5

不,静态变量的生命周期与加载类的类加载器一样长。所以这在许多应用程序中是“永远”的。

目前尚不清楚您要实现的目标,但此代码几乎肯定是个坏主意。

(通常,可变静态数据是一个坏主意。可变静态非私有字段是一个非常糟糕的主意 - 除了其他任何事情之外,您不可能出于同步目的控制所有访问。)