2012-10-14 60 views
-3

我想知道當我將靜態對象分配給非靜態對象時會發生什麼? 例如:當我將靜態對象分配給非靜態對象時會發生什麼?

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

這不是一個真正的問題... – OmniOwl

+0

你不是。 'getBoneCpPool()'返回一個新對象... – slugonamission

+0

'new BoneCpPool'創建了一個對象... –

回答

1

靜態對象實際上不存在。

在這種情況下,static關鍵字被稱爲getBoneCpPool()方法。這是完全合法的,靜態方法返回一個BonceCp對象的實例。

static修飾符關鍵字可以應用於方法,並且表示不屬於某個類的特定實例的方法,而是指向該類本身的方法。

static modifier關鍵字也可以應用於字段(實際上是對象的靜態引用)。在這種情況下,表示不屬於某個類的特定實例的字段,而是在相同類型的所有類實例之間共享。

+0

非常感謝:) – olyanren

0

這是不是真的分配靜態對象的非靜態對象。

BoneCp cp = BoneCpLoad.getBoneCpPool(); 

這條線相當於

BoneCp cp = new BoneCpPool(); 

哪個是對象的只是一個普通的實例化。

0

這整個問題是基於一個錯誤的前提。

在Java中,不存在static這樣的對象。所有對象都生活在堆中,它們的生命週期由可達性決定。

還有這樣的東西作爲static變量。但是,當您分配對static變量的引用時,沒有什麼特別的事情發生。該變量現在只包含對該對象的引用。同樣,當您將static變量中的引用賦值給任何其他類型的變量時,沒有什麼特別的情況發生。

相關問題