Java學習筆記——第七天

zgg1h發表於2024-03-06

物件導向程式設計(Object Oriented Programming,OOP)基礎

程序導向程式設計

開發一個一個的方法,有資料要處理了,我們就調方法來處理。此時程式類似於流水線,按照程式碼自上而下依次執行。

物件導向程式設計

開發一個一個的物件來處理資料,把資料交給物件,再呼叫物件的方法來完成對資料的處理。程式在物件的互動中完成執行。

類與物件

什麼是物件

物件就是具體的東西,一個具體的人是一個物件,一輛具體的車也是物件。

什麼是類

類就是從物件中抽象出來的一類東西的總稱,人這個類就是從一個個具體的人中抽象出來的。

面型物件程式設計的好處

符合人類的思維習慣,使程式設計更簡單、更直觀。

類的格式

public class 類名 {
    修飾符 資料型別 變數名稱; //成員變數
    修飾符 返回值型別 方法名稱 (...) {...}; //成員方法
    修飾符 類名 (形參列表) {...}; //構造器
    程式碼塊
    內部類
}

成員變數

類內部定義的變數。

成員方法

類內部定義的方法。

構造器

建立物件時呼叫的方法,其方法名必須與類名一致。

建立物件的格式

類名 變數名 = new 類名(實參列表); //實參列表可以為空

物件怎麼使用

  • 訪問成員變數:
物件名.成員變數名;
  • 訪問成員方法:
物件名.成員方法(...);

物件的執行原理

  1. 當建立物件時,物件的變數名會載入到棧記憶體中,其對應的類的程式碼會被載入到方法區中。

  2. 然後在堆記憶體中開闢一塊記憶體空間,儲存建立的物件,其中包含內部的成員變數以及一個類的地址變數,它儲存類在方法區中的程式碼的地址。

  3. 之後棧記憶體中的物件變數被賦值為堆記憶體中物件的地址。

如何識別引用型別的變數

只要變數中儲存的是物件的地址,此變數就是引用型別的變數。

類和物件的一些注意事項

  • 類名建議用英文單詞,首字母大寫,滿足駝峰模式,且要有意義,比如:Student、Car…

  • 類中定義的變數也稱為成員變數(物件的屬性),類中定義的方法也稱為成員方法(物件的行為)。

  • 成員變數本身存在預設值,預設值與動態初始化陣列元素的預設值相同,同學們在定義成員變數時一般來說不需要賦初始值(沒有意義)。

預設值

  • 一個程式碼檔案中,可以寫多個class類,但只能一個用public修飾,且public修飾的類名必須是程式碼檔名。

  • 物件與物件之間的資料不會相互影響,但多個變數指向同一個物件時就會相互影響了。

  • 如果某個物件沒有一個變數引用它,則該物件無法被操作了,該物件會成為所謂的垃圾物件。

  • Java存在自動垃圾回收機制,會自動清除掉垃圾物件。

this關鍵字

this是什麼

this就是一個變數, 可以用在方法中 ,用來拿到當前物件的地址,可以訪問當前物件的成員變數和成員方法;哪個物件呼叫方法,this就指向哪個物件,也就是拿到哪個物件。

this的的執行原理

當方法被定義好之後,Java會在編譯時在方法的引數列表中增加一個this變數,這個this變數會儲存該物件的地址。

this的應用場景

  • 解決物件的成員變數與方法內部變數的名稱一樣時,導致訪問衝突問題的:
    • 用在有參構造器中。
    • 用在方法中。

構造器

構造器是什麼

建立物件時會自動呼叫的方法,構造器可以在建立物件時實現成員變數的初始化以及其他的操作,常用於完成物件的初始化。

構造器的格式

public 類名(形參列表) {...}

構造器不需要返回值

構造器的分類

  • 無參構造器:形參列表為空。
  • 有參構造器:形參列表不為空。

構造器的特點

  • 類在設計時,如果不寫構造器,Java是會為類自動生成一個無參構造器的。
  • 一旦定義了有引數構造器,Java就不會幫我們的類自動生成無參構造器了,此時就建議自己手寫一個無引數構造器出來了。
  • 構造器也可以過載。

封裝

物件導向的三大特徵

  • 封裝
  • 繼承
  • 多型

什麼是封裝

就是用類設計物件處理某一個事物的資料時,應該把要處理的資料,以及處理這些資料的方法,設計到一個物件中去包裝起來。

封裝的設計規範

合理隱藏,合理暴露。

具體實現:

  1. 將所有成員變數隱藏起來,並同時提供setter和getter方法。
  2. 根據實際需求選擇隱藏或者暴露成員方法。

如何控制物件的成員公開或隱藏

  • 公開成員:使用public進行修飾。
  • 隱藏成員:使用private進行修飾。

實體JavaBean(實體類)

實體類是什麼

就是一種特殊的類,這些類與現實中的類相似,它只是一個用來儲存資料的java類,可以用它建立物件,儲存某個事物的資料。

實體類的要求

  1. 成員變數必須私有。
  2. 為所有成員變數提供setter和getter方法。
  3. 必須有無引數構造器。

實體類的應用場景

​ 實體類對應的是軟體開發裡現在比較流行的開發方式,資料和資料的業務處理相分離。資料的儲存使用實體類,資料的業務處理使用操作類。

補充1:成員變數和區域性變數的區別

區別 成員變數 區域性變數
類中位置不同 類中,方法外 常見於方法中
初始化值不同 有預設值, 不需要初始化賦值 沒有預設值,使用之前必須完成賦值
記憶體位置不同 堆記憶體 棧記憶體
作用域不同 整個物件 在所歸屬的大括號中
生命週期不同 與物件共存亡 隨著方法的呼叫而生,隨著方法的執行結束而亡

補充2:IDEA中的快捷方式

IDEA中可以按alt+insert自動生成setter、getter方法和任意引數的構造器。

相關文章