類體中包括成員變數和區域性變數,而成員變數又可以細分為例項變數和類變數,在宣告成員變數的時候,用static給予修飾的稱作類變數,否則稱作例項變數。(類變數也稱為static變數,靜態變數)
那麼,類變數和例項變數有什麼區別呢?
我們知道,乙個類通過使用new運算子可以建立多個不同的物件,這些物件將被分配不同的成員變數,說的更精確寫就是:分配給不通物件例項變數咱有不同的記憶體空間,改變其中乙個物件的例項變數不會影響其他物件的例項變數。
然而,如果類中有類變數,當使用new運算子建立多個不同的物件時,分配給這些物件的這個類變數占有相同的一出記憶體,改變其中乙個物件的這個類變數,那麼將會影響到其他對於下部分的這個類變數,也就算說不同的物件共享類變數。
既然這樣,那麼我要要怎麼訪問類變數呢?
不僅僅可以通過某個物件訪問,也可以直接通過類名訪問。而例項變數不同,只能用某個物件訪問。
物件呼叫例項方法
當類的位元組碼檔案被載入到記憶體是,類的例項方法不會被分配到入口位址,只有該類建立物件後,類中的例項方法才分配入口位址。從而例項方法可以被建立的任何物件呼叫執行。這裡需要注意的是,當我們建立第乙個物件時,類中的例項方法就分配了入口位址,當再建立物件時,不再分配入口位址。也就是說,方法的入口位址被所有的物件共享,當所有的物件不存在時,方法的入口位址才會被取消。
例項方法中不僅可以操作例項變數,也可以操作類變數,當物件呼叫例項方法時,該方法中出現的例項變數就是分配給該物件的例項變數,該方法中出現的類變數也是分配給該物件的變數,只不過這個變數和所有其他的物件共享而已。
類名呼叫類方法
對於類中的類方法,在該類被載入到記憶體時,就分配了相應的入口位址,從而類方法不僅可以被類建立的任何物件呼叫執行,也可以直接通過類名呼叫,類方法的入口位址知道程式退出了才會被取消。需要注意的是例項方法不能通過類名呼叫,只能由物件呼叫。
和例項方法不同的是,類方法不可以操作例項變數,這是因為在類建立物件之前,例項成員變數還沒有分配記憶體。
關於設計類方法的原則
對於static方法,不必建立物件就可以用類名直接呼叫它(建立物件會導致類中的例項變數被分配到記憶體空間中)。如果乙個方法不需要操作類中的任何例項變數,就可以滿足程式的需要的話,就可以考慮將這樣的方法設計為乙個static方法。
例項變數和類變數
例項變數 instance variable 我們在類內部,方法體外部,用 或不用 private protected public修飾定義 而且沒有static修飾符 的變數稱為 例項變數,即這些變數存放在這個類的每個物件的記憶體空間中,他們之間互不 影響 即對其中乙個物件的例項變數進行修改不會影...
例項變數和類變數
例項變數宣告在乙個類中,但在方法 構造方法和語句塊之外 當乙個物件被例項化之後,每個例項變數的值就跟著確定 例項變數在物件建立的時候建立,在物件被銷毀的時候銷毀 例項變數的值應該至少被乙個方法 構造方法或者語句塊引用,使得外部能夠通過這些方式獲取例項變數資訊 例項變數對於類中的方法 構造方法或者語句...
Python 類方法,例項方法,類變數,例項變數
建立乙個person類 class person object per v per v 建立乙個類變數 def init self,name,age 初始化類例項變數 self.name name self.age age definstance method self 建立類例項方法 print ...