Python 和 Java 基礎對比 09 —— 類的介紹

Python 和 Java 基礎對比 09 —— 類的介紹

一、Python 類的介紹

類的概念

用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

類的組成部分

1、變量

① 類變量

類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。

__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。

② 實例變量

在類的聲明中,屬性是用變量來表示的,這種變量就稱為實例變量,實例變量就是一個用 self 修飾的變量。

Python 和 Java 基礎對比 09 —— 類的介紹

③ 局部變量

定義在方法中的變量,只作用於當前實例的類。

2、類的構造器

__init__ 構造函數,在生成對象時調用。

3、類的方法

在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,且為第一個參數,self 代表的是類的實例。

self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定使用 self。

Python 和 Java 基礎對比 09 —— 類的介紹

輸出結果:

Python 和 Java 基礎對比 09 —— 類的介紹


二、Java 類的介紹

類的概念

類是具有相同屬性和行為的對象集合。

人是一個類

屬性:姓名、性別、身高、民族……

行為:跑、跳、工作、唱歌

類的組成部分

Java 類的組成部分:

① 變量

② 方法

③ 構造器

④ 代碼塊

⑤ 內部類

Python 和 Java 基礎對比 09 —— 類的介紹

1、變量

Python 和 Java 基礎對比 09 —— 類的介紹

【1】成員變量

把類內、方法體外定義的變量稱為成員變量。

I、實例變量

一是沒有 static 修飾的,這些成員變量是對象中的成員,稱為實例變量。

II、類變量(靜態變量)

二是有static修飾的,稱為類變量(靜態變量)。

特點:

① 隨著類的加載而加載

② 優先於對象存在

③ 被所有類的對象共享

④ 可以直接被類名調用

【面試題:實例變量和類變量的區別?】

① 存放位置:

類變量隨著類的加載而存在於方法區中。

實例變量隨著對象的建立而存在於堆內存中。

注意:方法區和堆是Java虛擬機的概念,後期專門講解。

② 生命週期

類變量生命週期最長,隨著類的消失而消失。

實例變量生命週期隨著對象的消失而消失。

【2】局部變量

在方法、構造函數或者語句塊中定義的變量被稱為局部變量。

特點:變量的聲明和初始化都是在方法中,方法結束後,變量就會自動銷燬。

2、方法

【1】訪問控制修飾符

Python 和 Java 基礎對比 09 —— 類的介紹

【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 修飾即可。

① 靜態內部類

Python 和 Java 基礎對比 09 —— 類的介紹

② 成員內部類

Python 和 Java 基礎對比 09 —— 類的介紹

③ 方法內部類(局部內部類)

如果把一個內部類放在方法裡定義,這就是局部內部類,僅僅在這個方法裡有效。局部內部類不能在外部類以外的地方使用,那麼局部內部類也不能使用訪問控制符和 static 修飾。

Java的執行順序

1、靜態代碼塊

靜態代碼塊在類被加載的時候就運行了,而且只運行一次,並且優先於各種代碼塊以及構造函數。如果一個類中有多個靜態代碼塊,會按照書寫順序依次執行。

2、構造代碼塊

構造代碼塊在創建對象時被調用,每次創建對象都會調用一次,但是優先於構造函數執行。

3、構造函數

構造函數不能被直接調用,必須通過new運算符在創建對象時才會自動調用,默認先調用父類的無參構造函數。

4、普通代碼塊

構造代碼塊是在類中定義的,普通代碼塊是在方法體中定義的。且普通代碼塊的執行順序和書寫順序一致。

>>>


分享到:


相關文章: