我在同一個包中創建了三個類classA,classB和classC。現在我在classB中創建三個classA對象,並在classC中創建兩個classA對象。現在我怎麼能在classA裏面繼續下去。如何獲得類的實例
1)classB和classC使用了多少個classA對象? 2)我如何獲得名稱爲&的類classA和classC中對象的引用?
我在同一個包中創建了三個類classA,classB和classC。現在我在classB中創建三個classA對象,並在classC中創建兩個classA對象。現在我怎麼能在classA裏面繼續下去。如何獲得類的實例
1)classB和classC使用了多少個classA對象? 2)我如何獲得名稱爲&的類classA和classC中對象的引用?
除非您爲每個A對象的c'tor提供對「所有者」的引用,否則不能。
對於實例總數,你可以在類A的靜態變量靜態變量是一種基於類本身而不是實例和定義,像這樣的變量:
private static int totalInstances = 0;
然後在類A的構造函數中,您只需增加該變量,然後在析構函數中對其進行遞減。
然後,您可以做一個訪問該變量
public int getTotalInstances(){
return totalInstances;
}
然後你就可以得到實例的總數ammount的,像這樣:
classA.getTotalInstances()
確保創建它的類名稱而不是實例名稱。
如果你想保持引用變量的軌跡,你可以創建引用變量的靜態數組,每一個對象以相同的方式創建時添加的參考,我們加總的情況:)
除了「破壞者」,我同意。你可以把這個減量放到一個被重寫的'finally'方法中,但是沒有保證它在對該實例的最後一個引用被銷燬之後立即被調用。 Big'GC在完成清理工作時就取決於它。 – 2009-12-21 08:57:47
如果你沒有這樣的:
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被創建。
如果您想了解更多詳細信息,請使用其中一個分析器。
你想要這個與類似於探查器所做的事情嗎? – GrayWizardx 2009-12-21 06:48:57