物件導向程式設計(Object Oriented Programming,OOP)基礎
程序導向程式設計
開發一個一個的方法,有資料要處理了,我們就調方法來處理。此時程式類似於流水線,按照程式碼自上而下依次執行。
物件導向程式設計
開發一個一個的物件來處理資料,把資料交給物件,再呼叫物件的方法來完成對資料的處理。程式在物件的互動中完成執行。
類與物件
什麼是物件
物件就是具體的東西,一個具體的人是一個物件,一輛具體的車也是物件。
什麼是類
類就是從物件中抽象出來的一類東西的總稱,人這個類就是從一個個具體的人中抽象出來的。
面型物件程式設計的好處
符合人類的思維習慣,使程式設計更簡單、更直觀。
類的格式
public class 類名 {
修飾符 資料型別 變數名稱; //成員變數
修飾符 返回值型別 方法名稱 (...) {...}; //成員方法
修飾符 類名 (形參列表) {...}; //構造器
程式碼塊
內部類
}
成員變數
類內部定義的變數。
成員方法
類內部定義的方法。
構造器
建立物件時呼叫的方法,其方法名必須與類名一致。
建立物件的格式
類名 變數名 = new 類名(實參列表); //實參列表可以為空
物件怎麼使用
- 訪問成員變數:
物件名.成員變數名;
- 訪問成員方法:
物件名.成員方法(...);
物件的執行原理
-
當建立物件時,物件的變數名會載入到棧記憶體中,其對應的類的程式碼會被載入到方法區中。
-
然後在堆記憶體中開闢一塊記憶體空間,儲存建立的物件,其中包含內部的成員變數以及一個類的地址變數,它儲存類在方法區中的程式碼的地址。
-
之後棧記憶體中的物件變數被賦值為堆記憶體中物件的地址。
如何識別引用型別的變數
只要變數中儲存的是物件的地址,此變數就是引用型別的變數。
類和物件的一些注意事項
-
類名建議用英文單詞,首字母大寫,滿足駝峰模式,且要有意義,比如:Student、Car…
-
類中定義的變數也稱為成員變數(物件的屬性),類中定義的方法也稱為成員方法(物件的行為)。
-
成員變數本身存在預設值,預設值與動態初始化陣列元素的預設值相同,同學們在定義成員變數時一般來說不需要賦初始值(沒有意義)。
-
一個程式碼檔案中,可以寫多個class類,但只能一個用public修飾,且public修飾的類名必須是程式碼檔名。
-
物件與物件之間的資料不會相互影響,但多個變數指向同一個物件時就會相互影響了。
-
如果某個物件沒有一個變數引用它,則該物件無法被操作了,該物件會成為所謂的垃圾物件。
-
Java存在自動垃圾回收機制,會自動清除掉垃圾物件。
this關鍵字
this是什麼
this就是一個變數, 可以用在方法中 ,用來拿到當前物件的地址,可以訪問當前物件的成員變數和成員方法;哪個物件呼叫方法,this就指向哪個物件,也就是拿到哪個物件。
this的的執行原理
當方法被定義好之後,Java會在編譯時在方法的引數列表中增加一個this變數,這個this變數會儲存該物件的地址。
this的應用場景
- 解決物件的成員變數與方法內部變數的名稱一樣時,導致訪問衝突問題的:
- 用在有參構造器中。
- 用在方法中。
構造器
構造器是什麼
建立物件時會自動呼叫的方法,構造器可以在建立物件時實現成員變數的初始化以及其他的操作,常用於完成物件的初始化。
構造器的格式
public 類名(形參列表) {...}
構造器不需要返回值
構造器的分類
- 無參構造器:形參列表為空。
- 有參構造器:形參列表不為空。
構造器的特點
- 類在設計時,如果不寫構造器,Java是會為類自動生成一個無參構造器的。
- 一旦定義了有引數構造器,Java就不會幫我們的類自動生成無參構造器了,此時就建議自己手寫一個無引數構造器出來了。
- 構造器也可以過載。
封裝
物件導向的三大特徵
- 封裝
- 繼承
- 多型
什麼是封裝
就是用類設計物件處理某一個事物的資料時,應該把要處理的資料,以及處理這些資料的方法,設計到一個物件中去包裝起來。
封裝的設計規範
合理隱藏,合理暴露。
具體實現:
- 將所有成員變數隱藏起來,並同時提供setter和getter方法。
- 根據實際需求選擇隱藏或者暴露成員方法。
如何控制物件的成員公開或隱藏
- 公開成員:使用public進行修飾。
- 隱藏成員:使用private進行修飾。
實體JavaBean(實體類)
實體類是什麼
就是一種特殊的類,這些類與現實中的類相似,它只是一個用來儲存資料的java類,可以用它建立物件,儲存某個事物的資料。
實體類的要求
- 成員變數必須私有。
- 為所有成員變數提供setter和getter方法。
- 必須有無引數構造器。
實體類的應用場景
實體類對應的是軟體開發裡現在比較流行的開發方式,資料和資料的業務處理相分離。資料的儲存使用實體類,資料的業務處理使用操作類。
補充1:成員變數和區域性變數的區別
區別 | 成員變數 | 區域性變數 |
---|---|---|
類中位置不同 | 類中,方法外 | 常見於方法中 |
初始化值不同 | 有預設值, 不需要初始化賦值 | 沒有預設值,使用之前必須完成賦值 |
記憶體位置不同 | 堆記憶體 | 棧記憶體 |
作用域不同 | 整個物件 | 在所歸屬的大括號中 |
生命週期不同 | 與物件共存亡 | 隨著方法的呼叫而生,隨著方法的執行結束而亡 |
補充2:IDEA中的快捷方式
IDEA中可以按alt+insert自動生成setter、getter方法和任意引數的構造器。