2009-12-21 82 views
1

我在同一個包中創建了三個類classA,classB和classC。現在我在classB中創建三個classA對象,並在classC中創建兩個classA對象。現在我怎麼能在classA裏面繼續下去。如何獲得類的實例

1)classB和classC使用了多少個classA對象? 2)我如何獲得名稱爲&的類classA和classC中對象的引用?

+0

你想要這個與類似於探查器所做的事情嗎? – GrayWizardx 2009-12-21 06:48:57

回答

1

除非您爲每個A對象的c'tor提供對「所有者」的引用,否則不能。

2

對於實例總數,你可以在類A的靜態變量靜態變量是一種基於類本身而不是實例和定義,像這樣的變量:

private static int totalInstances = 0; 

然後在類A的構造函數中,您只需增加該變量,然後在析構函數中對其進行遞減。

然後,您可以做一個訪問該變量

public int getTotalInstances(){ 
    return totalInstances; 
} 

然後你就可以得到實例的總數ammount的,像這樣:

classA.getTotalInstances() 

確保創建它的類名稱而不是實例名稱。

如果你想保持引用變量的軌跡,你可以創建引用變量的靜態數組,每一個對象以相同的方式創建時添加的參考,我們加總的情況:)

+0

除了「破壞者」,我同意。你可以把這個減量放到一個被重寫的'finally'方法中,但是沒有保證它在對該實例的最後一個引用被銷燬之後立即被調用。 Big'GC在完成清理工作時就取決於它。 – 2009-12-21 08:57:47

0

如果你沒有這樣的:

public class B { 
    private a1 = new A(); 
    private a2 = new A(); 
    private a3 = new A(); 
} 

public class C { 
    private a1 = new A(); 
    private a2 = new A(); 
} 

,那麼你可以使用反射API尋找A型的類成員和統計該類型的所有非空成員和反映A實例來獲取對象名稱(假設,你有一種A#getName()方法)。

如果你沒有這樣的(僅適用於B碼):

public class B { 
    public B() { 
    new A(); 
    new A(); 
    new A(); 
    } 
} 

,有沒有機會「看A B實例」並告訴,多少A的已創建。唯一的方法就是像Dominic建議的那樣對A級進行測量。但它不會告訴你,有多少個A存在,只有到目前爲止有多少個A被創建。

如果您想了解更多詳細信息,請使用其中一個分析器。