天天看點

JavaSE(面向對象基礎)

掌握:面向對象側重于指定類和對象的使用

類和對象(了解)

客觀存在的事物皆為對象,是以我們也常常說萬物皆對象

類的了解

  • 類是對現實生活中一類具有共同屬性和行為的事物的抽象
  • 類是對象的資料類型,類是具有相同屬性和行為的一組對象的集合
  • 簡單了解:類就是對現實事物的一種描述
  • 類的組成
    • 屬性:指事物的特征,例如:手機事物(品牌,價格,尺寸)
    • 行為:指事物能執行的操作,例如:手機事物(打電話,發短信)
    • 類和對象的關系
  • 類:類是對現實生活中一類具有共同屬性和行為的事物的抽象
  • 對象:是能夠看得到摸的着的真實存在的實體
  • 簡單了解:類是對事物的一種描述,對象則為具體存在的事物

類的定義

類的組成是由屬性和行為兩部分組成

  • 屬性:在類中通過成員變量來展現(類中方法外的變量)
  • 行為:在類中通過成員方法來展現(和前面的方法相比去掉static關鍵字即可)

類的定義步驟:

①定義類

②編寫類的成員變量

③編寫類的成員方法

/*
    手機類:
        類名:
        手機(Phone)

        成員變量:
        品牌(brand)
        價格(price)

        成員方法:
        打電話(call)
        發短信(sendMessage)
 */
public class Phone {
    //成員變量
    String brand;
    int price;

    //成員方法
    public void call() {
        System.out.println("打電話");
    }

    public void sendMessage() {
        System.out.println("發短信");
    }
}

           

對象的使用

  • 建立對象的格式:
    • 類名 對象名 = new 類名();
  • 調用成員的格式:
    • 對象名.成員變量
    • 對象名.成員方法();
/*
    建立對象
        格式:類名 對象名 = new 類名();
        範例:Phone p = new Phone();

    使用對象
        1:使用成員變量
            格式:對象名.變量名
            範例:p.brand
        2:使用成員方法
            格式:對象名.方法名()
            範例:p.call()
 */
public class PhoneDemo {
    public static void main(String[] args) {
        //建立對象
        Phone p = new Phone();

        //使用成員變量
        System.out.println(p.brand);
        System.out.println(p.price);

        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        //使用成員方法
        p.call();
        p.sendMessage();
    }
}
           

對象記憶體圖(了解)

單個對象記憶體圖

多個對象記憶體圖

多個對象指向相同記憶體圖

成員變量和局部變量

. 成員變量 局部變量 靜态變量
定義位值 在類中,方法外 方法中,或者方法的形式參數 在方法中,方法外
初始化值 有預設的初始化值 無,先定義,指派後才能使用 有預設的初始化值
調用方式 對象調用 ---- 對象調用,類名調用
存儲位置 堆中 棧中 方法區
生命周期 與對象共存亡 與方法共存亡 與類共存亡
别名 執行個體變量 ---- 類變量

封裝

  1. 封裝概述

    是面向對象三大特征之一(封裝,繼承,多态)

    是面向對象程式設計語言對客觀世界的模拟,客觀世界裡成員變量都是隐藏在對象内部的,外界是無法直接操作的

  2. 封裝原則

    将類的某些資訊隐藏在類内部,不允許外部程式直接通路,而是通過該類提供的方法來實作對隐藏資訊的操作和通路

    成員變量private,提供對應的getXxx()/setXxx()方法

  3. 封裝好處

    通過方法來控制成員變量的操作,提高了代碼的安全性

    把代碼用方法進行封裝,提高了代碼的複用性

    private(私有)關鍵字

private是一個修飾符,可以用來修飾成員(成員變量,成員方法)

  • 被private修飾的成員,隻能在本類進行通路,針對private修飾的成員變量,如果需要被其他類使用,提供相應的操作
    • 提供“get變量名()”方法,用于擷取成員變量的值,方法用public修飾
    • 提供“set變量名(參數)”方法,用于設定成員變量的值,方法用public修飾

this關鍵字

this修飾的變量用于指代成員變量,其主要作用是(區分局部變量和成員變量的重名問題)

  • 方法的形參如果與成員變量同名,不帶this修飾的變量指的是形參,而不是成員變量
  • 方法的形參沒有與成員變量同名,不帶this修飾的變量指的是成員變量

構造方法

構造方法是一種特殊的方法

  • 作用:建立對象 Student stu = new Student();
  • 格式:

    public class 類名{

    ​ 修飾符 類名( 參數 ) {

    ​ }

    }

  • 功能:主要是完成對象資料的初始化
class Student {
    private String name;
    private int age;

    //構造方法
    public Student() {
        System.out.println("無參構造方法");
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
    測試類
 */
public class StudentDemo {
    public static void main(String[] args) {
        //建立對象
        Student s = new Student();
        s.show();
    }
}
           

構造方法的注意事項(了解)

  • 構造方法的建立

如果沒有定義構造方法,系統将給出一個預設的無參數構造方法

如果定義了構造方法,系統将不再提供預設的構造方法

  • 構造方法的重載

如果自定義了帶參構造方法,還要使用無參數構造方法,就必須再寫一個無參數構造方法

  • 推薦的使用方式

無論是否使用,都手工書寫無參數構造方法

  • 重要功能!

可以使用帶參構造,為成員變量進行初始化

标準類制作(應用)

需求:定義标準學生類,要求分别使用空參和有參構造方法建立對象,空參建立的對象通過setXxx指派,有參建立的對象直接指派,并通過show方法展示資料。

class Student {
    //成員變量
    private String name;
    private int age;

    //構造方法
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成員方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
    建立對象并為其成員變量指派的兩種方式
        1:無參構造方法建立對象後使用setXxx()指派
        2:使用帶參構造方法直接建立帶有屬性值的對象
*/
public class StudentDemo {
    public static void main(String[] args) {
        //無參構造方法建立對象後使用setXxx()指派
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);
        s1.show();

        //使用帶參構造方法直接建立帶有屬性值的對象
        Student s2 = new Student("林青霞",30);
        s2.show();
    }
}