6.Java語言的類、對象和封裝

類與對象

1.面向對象思想

就是將做一件事(實現某個功能)通過創建對象,然後調用對象的行爲來實現

2.與面向過程(思想)的區別

面向過程是自己一步一步的操作去實現功能,面向對象是把實現功能的部分交給對象的屬性和行爲去實現

3.類

具有相關屬性和行爲的一種事物的集合,比如說寵物貓、裝水的杯子...等等

例如:寵物貓:

                      屬性:顏色、重量...

                      行爲:爬樹、抓老鼠...

4.類的定義

格式:

        public class ClassName {

//成員變量

//成員方法

}

5.對象

每一種事物都有自己的屬性和行爲,好比如寵物貓,這是一個總的概述,他有自己的屬性(品種、顏色、重量、叫聲...),而對象就是指明的一隻貓,他的各種“屬性”都是確定的,那麼對於寵物貓這個總述,這隻貓就是一個“對象”。

 

6.對象的創建和使用

創建格式:

        類名 對象名 = new 類名();

使用格式:

對象名.成員變量;

對象名.成員方法();

7.類與對象的關係

類是對一類事物的描述,是抽象的。 對象是一類事物的實例,是具體的。 類是對象的模板,對象是類的實體。

類是對一類事物總的概括,對象是具體的哪一個

8.成員變量的默認值

整數:           0

浮點數:        0.0

boolean:         false

字符:           ‘\u0000’(空字符)

字符串:          null

9.成員變量與局部變量的區別

1定義位置不同:

成員變量定義在類中方法外,局部變量定義在方法內

2默認值不同:

成員變量的默認值如上,局部變量不賦值不可以調用

3內存中的位置不同:

對象是new出來,對象在堆裏,成員變量跟着對象在堆裏面,棧是保存變量,運行方法,局部變量跟着方法在棧裏

4生命週期不同:

對象是new出來,跟對象誕生,所以成員變量跟着對象死亡,局部變量跟着方法的運行誕生,跟着方法死亡

封裝

1.封裝

將屬性隱藏起來,相當於建立起了一層保護屏障,防止數據和代碼被其他類隨意訪問。如果要訪問,必須通過指定的方式。讓代碼更容易理解和維護,增加了安全性。

2.封裝的方法

使用private(私有的)關鍵字修飾成員變量或成員方法。

3.設置器

getXxx方法,設置訪問封裝的成員變量值

4.訪問器

getXxx方法,獲取封裝的成員變量值

例子:

5.IDEA自動生成getters/setter

右鍵選擇,GenerateàGetter and Setterà選擇成員變量點擊OK

快捷鍵:ALT + insert

6.成員變量爲boolean的訪問器

isXxx訪問器

setXxx 設置器

構造方法

1.封裝的優化1:this關鍵字

this代表所在類的當前對象的引用(地址值),即對象自己的引用。(方法被哪個對象調用,方法中的this就代表那個對象)

方法參數中的變量名和成員變量的變量名相同時,用this關鍵字來區分

使用格式:

              this.成員變量名;

2.封裝的優化2:構造方法

1.當一個對象被創建時候,構造方法用來初始化該對象,給對象的成員變量賦初始值

2.如果沒有定義構造方法,Java默認贈送一個無參的構造方法,如果創建了則不贈送

3.構造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,不需要void。

3.封裝的優化3:構造方法-重載

和方法重載一樣,參數列表不同,方法名相同

1.只能new調用,用來創建對象

2.給成員變量賦值

 

開發中一般   寫一個無參構造方法,寫一個全參構造方法

4.IDEA自動生成構造方法

右鍵選擇 generateàconstructorà選擇成員變量(構造方法的參數)

可以參考自動生成get、set方法的圖示

5.構造方法注意事項

1.自己不定義構造方法,系統會送一個 無參

2.自己定義了構造方法,系統不送

3.構造方法可以重載,項目中,寫一個無參,全參

6.標準的JavaBean類

a) 成員變量必須private

b) 配套get/set

c) 構造方法

d) 其他方法

示例:測試類如下

package com.itheima.day06;

public class Test01 {
    //兩個成員變量
    private String name;
    private int age;
    //無參數的構造方法
    public Test01() {
        System.out.println("這裏是無參構造方法,用來初始化變量");
    }
    //有參數(全參)的構造方法
    public Test01(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //成員變量name配套的get方法
    public String getName() {
        return name;
    }
    //成員變量name配套的set方法
    public void setName(String name) {
        this.name = name;
    }
    //成員變量age配套的get方法
    public int getAge() {
        return age;
    }
    //成員變量age配套的set方法
    public void setAge(int age) {
        this.age = age;
    }
    //其他方法
    public void show(Test01 test){
        System.out.println("姓名:"+name+"年齡:"+age);
        System.out.println("這是類中的其他方法,可以把創建的對象傳遞過來");
        System.out.println("這個方法裏面可以無條件調用private的成員變量");
    }

    public static void main(String[] args) {

    }
}

調用如下:

package com.itheima.day06;

public class Test02 {
    public static void main(String[] args) {
        Test01 test1 = new Test01();//創建一個對象,調用無參構造方法
        Test01 test2 = new Test01("張三",18);
        test1.show(test1);
        test2.show(test2);
    }
}

 輸出如下:

 

 

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