Java 将静态对象指定给非静态对象时会发生什么?

Java 将静态对象指定给非静态对象时会发生什么?,java,static,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(){

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

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;
    }
}

这并不是将静态对象指定给非静态对象

BoneCp cp = BoneCpLoad.getBoneCpPool();
这条线相当于

BoneCp cp = new BoneCpPool();

这只是一个对象的普通实例化。

整个问题基于一个错误的前提

在Java中,没有所谓的
静态对象。所有对象都存在于堆中,它们的生存期由可达性决定


有一个
静态
变量。但是,当您将引用指定给
静态
变量时,不会发生任何特殊情况。变量现在只包含对对象的引用。类似地,当您将
静态
变量中的引用指定给任何其他类型的变量时,不会发生任何特殊情况。

静态对象实际上不存在

在本例中,static关键字引用getBoneCpPool()方法。这是完全合法的,静态方法返回BonceCp对象的实例

静态修饰符关键字可以应用于方法,并表示不属于类的特定实例,而是属于类本身的方法


静态修改器关键字也可以应用于字段(实际上是对对象的静态引用)。在本例中,表示不属于某个类的特定实例,但在同一类型的所有类实例之间共享的字段。

这不是一个真正的问题……您不是
getBoneCpPool()
返回一个新对象…
newbonecppool
创建了一个对象。。。