将静态对象分配给非静态对象时会发生什么?

时间:2012-10-14 12:13:36

标签: java static

我想知道当我将静态对象分配给非静态对象时会发生什么? 例如:

public class Test{
   public void test(){
      BoneCp cp=BoneCpLoad.getBoneCpPool();
   }
}

public class BoneCpLoad{
    private static BoneCpPool pool =new BoneCpPool();
    public static BoneCp getBoneCpPool(){
        return pool;
    }
}

3 个答案:

答案 0 :(得分:1)

静态对象实际上不存在。

在这种情况下,static关键字被称为getBoneCpPool()方法。这是完全合法的,静态方法返回一个BonceCp对象的实例。

static modifier关键字可以应用于方法,并表示不属于类的特定实例但属于类本身的方法。

static modifier关键字也可以应用于字段(实际上是对象的静态引用)。在这种情况下,表示不属于类的特定实例但在相同类型的所有类实例之间共享的字段。

答案 1 :(得分:0)

这并不是真正将静态对象分配给非静态对象。

BoneCp cp = BoneCpLoad.getBoneCpPool();

这一行相当于

BoneCp cp = new BoneCpPool();

这只是对象的正常实例化。

答案 2 :(得分:0)

这整个问题是基于错误的前提。

在Java中,没有static对象这样的东西。所有对象都存在于堆中,其生命周期由可达性决定。

这样的static变量。但是,当您为static变量分配引用时,不会发生任何特殊情况。该变量现在只包含对象的引用。同样,当您将static变量中的引用分配给任何其他类型的变量时,没有什么特别的事情发生。