類與對象(面向對象),封裝,構造方法

首先說明一下,在程序設計思想中有兩種主流思想分別爲面向過程與面向對象:

面向過程:當需要實現一個功能的時候,每一個具體的步驟都要親力親爲,詳細處理每一個細節。
面向對象:當需要實現一個功能的時候,不關心具體的步驟,而是找一個已經具有該功能的人,來幫我做事兒。

面向對象的特點與特徵:

兩個特點:
 1.不需要親歷親爲,找一個具有這樣方法的對象。
 2.將複雜的問題簡單化,並且將我們由執行者變爲指揮者。

三大特徵:封裝,繼承,多態;

定義一個類:

類是用來模擬事物。其中就有兩個組成部分:

屬性(是什麼):就是該事物具有的狀態信息。(成員變量)
行爲(能做什麼):就是該事物能做什麼。(成員方法)

用一個學生來做例子:

用來模擬“學生”事物。其中就有兩個組成部分:

屬性:就是該事物具有的狀態信息。
    姓名
    年齡
行爲:就是該事物能做什麼。
    吃飯
    睡覺
    學習

對應到Java的類當中:

成員變量(屬性):
    String name; // 姓名
    int age; // 年齡
成員方法(行爲):
    public void eat() {} // 吃飯
    public void sleep() {} // 睡覺
    public void study() {} // 學習

 

注意事項:
1. 成員變量是直接定義在類當中的,在方法外邊。
2. 成員方法不要寫static關鍵字

 

類與對象的關係


 1.類是一類事物的描述,是抽象的。
 2.對象是一類事物的實例,是實體的。
 3.類是對象的模板,對象是類的實體。
 

 

創建類

1. 創建,格式:
類名稱 對象名 = new 類名稱();
Student stu = new Student();

2.使用,分爲兩種情況:
使用成員變量:對象名.成員變量名
使用成員方法:對象名.成員方法名(參數)
(也就是,想用誰,就用對象名點兒誰。)

注意事項:
如果成員變量沒有進行賦值,那麼將會有一個默認值,規則和數組一樣。

改變對象當中的成員變量數值內容
        // 將右側的字符串,賦值交給stu對象當中的name成員變量
        stu.name = "張三";
使用對象的成員方法,格式:
        // 對象名.成員方法名()

 

局部變量和成員變量

1. 定義的位置不一樣【重點】
局部變量:在方法的內部
成員變量:在方法的外部,直接寫在類當中

2. 作用範圍不一樣【重點】
局部變量:只有方法當中纔可以使用,出了方法就不能再用
成員變量:整個類全都可以通用。

3. 默認值不一樣【重點】
局部變量:沒有默認值,如果要想使用,必須手動進行賦值
成員變量:如果沒有賦值,會有默認值,規則和數組一樣

4. 內存的位置不一樣
局部變量:位於棧內存
成員變量:位於堆內存

5. 生命週期不一樣
局部變量:隨着方法進棧而誕生,隨着方法出棧而消失
成員變量:隨着對象創建而誕生,隨着對象被垃圾回收而消失

 

封裝性在Java當中的體現:
1. 方法就是一種封裝
2. 關鍵字private也是一種封裝

封裝就是將一些細節信息隱藏起來,對於外界不可見。
問題描述:定義Person的年齡時,無法阻止不合理的數值被設置進來。
解決方案:用private關鍵字將需要保護的成員變量進行修飾。

一旦使用了private進行修飾,那麼本類當中仍然可以隨意訪問。

但是!超出了本類範圍之外就不能再直接訪問了。

間接訪問private成員變量,就是定義一對兒Getter/Setter方法

必須叫setXxx或者是getXxx命名規則。
對於Getter來說,不能有參數,返回值類型和成員變量對應;
對於Setter來說,不能有返回值,參數類型和成員變量對應。
對於基本類型當中的boolean值,Getter方法一定要寫成isXxx的形式,而setXxx規則不變。
/ 普通使用方式
//        Scanner sc = new Scanner(System.in);
//        int num = sc.nextInt();

        // 匿名對象的方式
//        int num = new Scanner(System.in).nextInt();
//        System.out.println("輸入的是:" + num);

        // 使用一般寫法傳入參數
//        Scanner sc = new Scanner(System.in);
//        methodParam(sc);

        // 使用匿名對象來進行傳參
//        methodParam(new Scanner(System.in));


當方法的局部變量和類的成員變量重名的時候,根據“就近原則”,優先使用局部變量。
如果需要訪問本類當中的成員變量,需要使用格式:
this.成員變量名

“通過誰調用的方法,誰就是this。”
構造方法是專門用來創建對象的方法,當我們通過關鍵字new來創建對象時,其實就是在調用構造方法。
格式:
public 類名稱(參數類型 參數名稱) {
    方法體
}

注意事項:
1. 構造方法的名稱必須和所在的類名稱完全一樣,就連大小寫也要一樣
2. 構造方法不要寫返回值類型,連void都不寫
3. 構造方法不能return一個具體的返回值
4. 如果沒有編寫任何構造方法,那麼編譯器將會默認贈送一個構造方法,沒有參數、方法體什麼事情都不做。
public Student() {}
5. 一旦編寫了至少一個構造方法,那麼編譯器將不再贈送。
6. 構造方法也是可以進行重載的。
重載:方法名稱相同,參數列表不同。

 

標準的類

標準的類通常要擁有下面四個組成部分:

1. 所有的成員變量都要使用private關鍵字修飾
2. 爲每一個成員變量編寫一對兒Getter/Setter方法
3. 編寫一個無參數的構造方法
4. 編寫一個全參數的構造方法

這樣標準的類也叫做Java Bean

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章