2016-10-20 64 views
-2

在jvm中,函數被加載到在類加載時初始化的方法區域中,堆中的對象調用這些函數以提高性能。封裝是數據成員和成員函數的綁定。在這種情況下,我沒有看到對象級封裝。 同樣,如果一個類有成千上萬的實例,可以一次又一次地共享相同的函數,因爲函數可以被看作是各種對象共享的資源。
請澄清。爲什麼封裝不在對象中/爲什麼我們稱之爲封裝

+0

對象是狀態和行爲一起封裝到一個軟件組件中。 「不在物體中」?錯誤。你可以有許多具有相同功能的實例,但不共享。每個人都在自己的封裝狀態下運行。 – duffymo

+0

是先生,但方法存儲在方法區域中,並且java對象實例位於堆棧區域中存在的引用id的訪問方法堆中。所以這些方法與通過不同對象實例訪問的方法相同。我在封裝中存在疑問,因爲方法和實例數據成員沒有像在課堂上一樣粘合在一起。通過創建不同的實例,我們一次又一次地共享相同的功能。 –

+0

錯了。對不起,你不明白。這是每個面嚮對象語言的一部分。有用。你不願意承認,也許你誤解了? – duffymo

回答

0

功能加載到其中的類裝載時間

Java的初始化不具備的功能的方法區,它只有其與一類總是相關的方法。如何加載這些方法取決於JVM。在HotSpot JVM中,可以在JVM的整個生命週期中優化和重建許多方法。

您不應該混淆類的靜態變量的初始化過程,只要完成一次,就可以在不同的時間以不同的方式操縱方法的代碼。

封裝是數據成員和成員函數的綁定。

我不同意。在面向對象的編程中,封裝是實現細節的隱藏。對象上方法的調用者不需要知道方法是如何實現的或者使用了哪些字段。

可以一次又一次地共享相同的函數,因爲函數可以被視爲各種對象共享的資源。

方法是隻讀的,因此它們可以有任意數量的副本並且沒有問題。因此,他們不是資源爭奪的來源。

成員不結合在一起,因爲它們是在類

它們究竟是如何結合的方法和實例數據並不重要。所有你需要知道的是一個對象有一個類,並且該類有方法。任何數量的對象都可以具有相同的類,而不會影響性能。 (除了內存不足的可能性)

+0

非常感謝。這些信息確實很好 –

相關問題