一、Python 類的介紹
類的概念
用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
類的組成部分
1、變量
① 類變量
類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。
__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。
② 實例變量
在類的聲明中,屬性是用變量來表示的,這種變量就稱為實例變量,實例變量就是一個用 self 修飾的變量。
③ 局部變量
定義在方法中的變量,只作用於當前實例的類。
2、類的構造器
__init__ 構造函數,在生成對象時調用。
3、類的方法
在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,且為第一個參數,self 代表的是類的實例。
self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定使用 self。
輸出結果:
二、Java 類的介紹
類的概念
類是具有相同屬性和行為的對象集合。
人是一個類
屬性:姓名、性別、身高、民族……
行為:跑、跳、工作、唱歌
類的組成部分
Java 類的組成部分:
① 變量
② 方法
③ 構造器
④ 代碼塊
⑤ 內部類
1、變量
【1】成員變量
把類內、方法體外定義的變量稱為成員變量。
I、實例變量
一是沒有 static 修飾的,這些成員變量是對象中的成員,稱為實例變量。
II、類變量(靜態變量)
二是有static修飾的,稱為類變量(靜態變量)。
特點:
① 隨著類的加載而加載
② 優先於對象存在
③ 被所有類的對象共享
④ 可以直接被類名調用
【面試題:實例變量和類變量的區別?】
① 存放位置:
類變量隨著類的加載而存在於方法區中。
實例變量隨著對象的建立而存在於堆內存中。
注意:方法區和堆是Java虛擬機的概念,後期專門講解。
② 生命週期
類變量生命週期最長,隨著類的消失而消失。
實例變量生命週期隨著對象的消失而消失。
【2】局部變量
在方法、構造函數或者語句塊中定義的變量被稱為局部變量。
特點:變量的聲明和初始化都是在方法中,方法結束後,變量就會自動銷燬。
2、方法
【1】訪問控制修飾符
【2】方法的組成部分
① 方法中的修飾符:
public , protected , private , static , final , abstract
其中訪問控制符(public , protected , private)只能出現一個, abstract , final 只能出現其一.
② 返回值類型:
可以是基本類型和引用類型,如果無返回值,要用 void 來聲明
③ 形參列表:
可以由零到多個組成,參數之間用逗號(“,”)隔開.
3、構造器
[修飾符] 構造器名(形參列表) {……}
它沒有返回值,也不能用void來修飾。
修飾符可以是public 、protected 、private 構造器名字必須和類名相同,形參和方法的形參一樣,
構造器通常用來new對象。
4、代碼塊
① 普通代碼塊:
類中方法的方法體。
② 構造代碼塊:
構造塊會在創建對象時被調用,每次創建時都會被調用,優先於類構造函數執行。
③ 靜態代碼塊:
用static{}包裹起來的代碼片段,只會執行一次。靜態代碼塊優先於構造塊執行。靜態代碼塊不能存在任何方法體中。在類加載的時候,靜態方法也已經加載了,但是我們必須要通過類名或者對象名才能訪問,也就是說相比於靜態代碼塊,靜態代碼塊是主動運行的,而靜態方法是被動運行的。
④ 同步代碼塊:
使用synchronized(){}包裹起來的代碼塊,在多線程環境下,對共享數據的讀寫操作是需要互斥進行的,否則會導致數據的不一致性。同步代碼塊需要寫在方法中。
5、內部類
只要 A 類是在 B 類裡面定義的,那麼 A 便是 B 的內部類。區分是不是靜態類的話,看有沒有用 staic 修飾即可。
① 靜態內部類
② 成員內部類
③ 方法內部類(局部內部類)
如果把一個內部類放在方法裡定義,這就是局部內部類,僅僅在這個方法裡有效。局部內部類不能在外部類以外的地方使用,那麼局部內部類也不能使用訪問控制符和 static 修飾。
Java的執行順序
1、靜態代碼塊
靜態代碼塊在類被加載的時候就運行了,而且只運行一次,並且優先於各種代碼塊以及構造函數。如果一個類中有多個靜態代碼塊,會按照書寫順序依次執行。
2、構造代碼塊
構造代碼塊在創建對象時被調用,每次創建對象都會調用一次,但是優先於構造函數執行。
3、構造函數
構造函數不能被直接調用,必須通過new運算符在創建對象時才會自動調用,默認先調用父類的無參構造函數。
4、普通代碼塊
構造代碼塊是在類中定義的,普通代碼塊是在方法體中定義的。且普通代碼塊的執行順序和書寫順序一致。
>>>
閱讀更多 Python大星 的文章