1. 程式人生 > >javaSE_面向物件程式設計之類與物件

javaSE_面向物件程式設計之類與物件

一、面向物件程式設計:

現在的程式設計主要有一下幾種:

1)面向物件程式設計

  • 例子:狗吃屎(主要突出的是狗和屎兩個物件)
  • 每個物件 ----> 是一個類
  • 屬性及方法 —> 能夠進行現實生活的抽象
  • 名次擴充套件: OOA:面向物件分析 OOD:面向物件設計 OOP:面向物件程式設計

2)面向過程程式設計

例子:吃狗屎(主要突出 吃 這一過程)

3)面向切面程式設計(EE-AOP)

4)面向介面程式設計 - 介面優先原則

5)函數語言程式設計

二、面向物件程式設計的三大特徵:

  1. 封裝性:所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。簡而言之就是,內部操作對外部而言不可見(保護性)

  2. 繼承性:繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。

  3. 多型性(*):所謂多型就是指一個類例項的相同方法在不同情形有不同表現形式。多型機制使具有不同內部結構的物件可以共享相同的外部介面。

三、類與物件的定義與使用

  • 所謂的類是指共性的概念,而物件指的是一個具體的、可以使用的事物。

  • 產生:首先產生類(類是生產物件的藍圖),而後才可以產生物件。物件的所有行為,一定在類中進行了完整的定義。

3.1 類與物件的定義:

在這裡插入圖片描述 舉個例子(定義一個Person類): 在這裡插入圖片描述

其中關鍵字new的作用:開闢記憶體,,,只要出現了關鍵字new,就開闢了記憶體 Java中,所謂的效能調優,調整的就是記憶體問題

4、物件記憶體分析

我們可以簡單的將java中的記憶體區域分為棧記憶體堆記憶體兩塊區域(實際Java記憶體區域的劃分遠比這個複雜,後續會詳細講述)

  1. 棧記憶體(虛擬機器區域性變量表):存放的是區域性變數(包含編譯期可知的各種基本資料型別、物件引用-即堆記憶體的地址,可以簡單的理解為物件的名稱),Java棧是與執行緒對應起來的,每當建立一個執行緒,JVM就會為這個執行緒建立一個對應的Java棧。
  2. 堆記憶體:儲存的是真正的資料。即物件的屬性資訊 具體分析如下: 在這裡插入圖片描述

注意:

物件(引用資料型別)必須在例項化後呼叫,否則會產生NullPointerException(執行時錯誤),編譯時不會出錯"NullPointerException"在各位今後的開發生涯中會一直存在,只有引用型別(陣列、類、介面)才會產生此類異常。以後出現此類異常,就根據出錯位置檢視引用型別變數是否初始化
  1. 引用傳遞分析 引用傳遞的本質:一塊堆記憶體可以被多個棧記憶體所指向 在這裡插入圖片描述

垃圾空間:沒有任何棧記憶體指向的堆記憶體空間 建議:所有的垃圾空間會不定期GC,GC會影響效能,所以開發之中一定要控制好物件的產生數量(無用的物件儘量少產生)

四、private實現封裝和構造方法

private 封裝

封裝是面向物件裡最複雜的概念,使用private關鍵字實現的封裝處理只是封裝的第一步,若想完全掌握封裝,需要後續將繼承和多型學完。

無封裝範例: 在這裡插入圖片描述 在沒有封裝屬性的情況下,外部通過屬性可以對物件進行任意操作,為了解決這個問題,可以使用private對物件進行封裝(物件不能直接操作屬性)。

在這裡插入圖片描述 使用private封裝後要訪問私有屬性,需要使用setter和getter方法:

  • setter方法:主要用於進行屬性內容的設定與修改
  • getter方法:主要用於屬性內容的取得

類的設計原則:沒有特殊說明,在編寫類的時候,所有屬性(成員變數)必須使用private封裝。

構造方法:

所謂的構造方法就是使用關鍵字new例項化新物件時來進行呼叫的操作方法。

對於構造方法的定義,也需要遵循以下原則:

  1. 方法名稱必須與類名稱相同
  2. 構造方法沒有返回值型別宣告
  3. 每一個類中一定至少存在一個構造方法(沒有明確定義,則系統自動生成一個無參構造) 在這裡插入圖片描述 注意:沒有返回值型別宣告,不是沒有返回值(不能加void)

編譯器是根據程式結構來區分普通方法與構造方法的,所以在構造方法前沒有返回值型別宣告 若類中定義了構造方法,則預設的無參構造將不再生成

構造方法的過載:

構造方法的引數個數和型別不同 建議:若干構造方法,請按照引數個數升序或降序 在這裡插入圖片描述