天天看點

java執行個體化_Java執行個體化

小編典典

執行個體化對象時,實際上僅“靜态”資料以及建立該對象的對象類型的引用被“建立”。

沒有方法被複制過。

建立它的類的“引用”實際上是一個指針排程表。該類可用的每個方法都存在一個指針。指針始終指向該方法的“正确”(通常是對象樹中最低/最具體)的實作。

這樣,如果您對另一個方法進行了頂層調用,但另一個方法已被覆寫,則将調用被覆寫的方法,因為這是表中指針所指向的位置。由于這種機制,調用覆寫方法應該比頂層方法花費更多時間。

指針表+成員變量是類的“執行個體”。

變量問題與完全不同的機制“名稱空間”有關。變量根本不屬于“子類”(它們不進入配置設定表),但是公共變量或受保護變量可以被局部變量隐藏。這些都是由編譯器在編譯時完成的,與您的運作時對象執行個體無關。編譯器确定您真正想要的對象,并将對該對象的引用填充到您的代碼中。

作用域規則通常傾向于“最近”變量。具有較遠名稱的任何内容都将被忽略(陰影),以支援更近的定義。

如果您感興趣的話,可以更詳細地了解記憶體配置設定:所有“對象”都配置設定在“堆”上(實際上,它比真正的堆更有效,更漂亮,但概念相同。)變量始終是指針-

Java永遠不會複制對象,您總是将指針複制到該對象。方法參數和局部變量的變量指針配置設定是在堆棧上完成的,但是即使變量(指針)是在堆棧上建立的,它們指向的對象仍然永遠不會在堆棧上配置設定。

我很想寫一個例子,但這已經太久了。如果您要我輸入具有擴充關系的幾個類,以及它們的方法和資料如何影響生成的代碼,我可以…問。

2020-10-20

繼續閱讀