JAVA物件導向基礎--物件導向介紹

月亮警察發表於2024-03-11

一、程序導向 & 物件導向

1.程序導向

  • 步驟清晰簡單,第一步做什麼,第二步做什麼等等
  • 面對過程適合處理一些較為簡單的問題

2.面對物件思想

  • 物以類聚,分類的思維模式。(分類細分解決問題)
    • 思考問題首先會解決問題需要哪些分類
    • 然後對這些分類進行單獨思考
    • 最後,對某個分類下的細節進行程序導向的思索
  • 物件導向適合處理複雜的問題,適合處理需要多人協作的問題

注意:對於描述複雜的事物,為了從宏觀上把握、從整體上合理分析,我們需要使用物件導向的思路來分析整個系統。但是,具體到微觀操作,仍然需要程序導向的思路去處理。

二、什麼是物件導向

  • 物件導向程式設計(Object-Oriented Programming,OOP)
  • 物件導向程式設計的本質是:以類的方式組織程式碼,以物件的組織(封裝)資料
  • 從認識論的角度是先有物件後有類
    • 物件:具體事物
    • 類:抽象的,是對物件的抽象
  • 從程式碼執行角度是先有類後有物件
    • 類是物件的模板

三大特性:

  1. 封裝:比如將一個東西裝起來只留一個進出的口
  2. 繼承:父子關係
  3. 多型:比如,不同的人使用一種方法會產生不同的效果

三、類與物件的關係

  1. 類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但並不代表某一個具體的事物
  • 一個類中只有屬性和方法

  • 比如:動物、植物、手機、電腦....都是一種抽象的型別

  • Person類、Pet類、Car類,這些都是同來描述/定義某一類具體的事物應該具備的特點和行為

  1. 物件是抽象概念的具體事例
  • 張三就是人的一個具體事例,張三家裡的旺財就是狗的一個具體事例
  • 能夠體現出特點,展現出功能的是具體的事例,而不是一個抽象的概念

四、建立與初始化物件

使用new關鍵字建立物件

  • 使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行初始化賦值以及對類中構造器的呼叫
  • 類中的構造器也稱為構造方法,是在進行建立物件時必須要呼叫的,並且構造器有以下兩個特點
    • 必須和類的名字相同
    • 必須沒有返回型別,也不能寫void
  • 注意:構造器必須掌握

舉例:

注意:以類的方式組織程式碼,以物件的方式封裝資料

  1. 建立一個Student類,作為模板
//學生類
//以類的方式組織程式碼
public class Student {
    String name;//屬性1:姓名,預設值為null
    int age;//屬性2:年齡,預設值為0

    //方法
    public void study(){
        System.out.println(this.name+"在學習");
    }
}
  1. 再建立一個類,用於編寫具體程式碼
public class Appliance {
    public static void main(String[] args) {
        //類:抽象的,需要例項化
        //類例項化後會返回一個自己的物件
        //xiaoming、xiaohong就是Student類的具體事例
        Student xiaoming = new Student();
        Student xiaohong = new Student();

        //賦值
        //以物件的方式封裝資料
        xiaoming.name = "小明";
        xiaoming.age = 18;

        xiaohong.name = "小紅";
        xiaohong.age = 17;

        //輸出
        System.out.println(xiaoming.name+"\t"+xiaoming.age+"歲");//輸出  小明  18歲
        System.out.println(xiaohong.name+"\t"+xiaohong.age+"歲");//輸出  小紅  17歲
    }
}

五、構造器(必須掌握)

構造器的作用:

  • 使用new關鍵字,本質是在呼叫構造器

  • 用來初始化值

舉例:

  1. 建立一個Person類
public class Person {

    String name;//name屬性

    //構造器的作用:
    // 1.使用new關鍵字,本質是在呼叫構造器
    // 2.用來初始化值
    
     //預設構造器
    //無參構造:預設不顯示
    public Person(){
        this.name = "Lisi";
    }

    //過載構造器
    //有參構造:一旦定義了有參構造,無參構造就必須顯示定義
    public Person(String name){
        //this.name中的name是指上面的name屬性
        //等號右邊的name是指有參構造中的引數name
        this.name = name;
    }
}

注意:

  • 無參構造器是預設不顯示的(不顯示但存在,同class檔案可以看到),所有當一個類中什麼都沒有的時候,在main方法中也可以例項化一個物件
  • 定義了有參構造器時,無參構造就必須顯示定義(即手動定義),否則無法例項化物件
  1. 建立另外一個Appliance類,並加上main方法
public class Appliance {
    public static void main(String[] args) {
        //new 例項化了一個物件
        Person person = new Person();//呼叫的是無參構造器,預設值為null,但無參構造器中初始化了,則輸出初始化的值
        Person person1 = new Person("Zhangsan");//呼叫的是有參構造器

        System.out.println(person.name);//輸出Lisi
        System.out.println(person1.name);//輸出Zhangsan
    }
}

生成構造器的快捷鍵:

  • Alt+Insert:自動生成構造器(膝上型電腦沒有反應則按:Fn+Alt+Insert)
  • 點選Constructor

  • 選擇有參無參即可

六、建立物件記憶體分析

建立了一個Pet類如下:

public class Pet {
    //屬性
    String name;
    int age;
    //方法
    public void shout(){
        System.out.println("叫了一聲!");
    }
}

再建立一個包含main方法的類進行具體操作如下:

public class Appliance {
    public static void main(String[] args) {
        //物件1
        Pet dog = new Pet();
        dog.name = "旺財";
        dog.age = 3;
        dog.shout();
        //物件2
        Pet cat = new Pet();
    }
}

對以上程式碼進行記憶體分析

簡易記憶體描述如下:

  1. new了一個dog物件後記憶體變化如下:
 Pet dog = new Pet();

  1. 給dog物件賦值後,變化如下:
dog.name = "旺財";
dog.age = 3;
dog.shout();

  1. new了一個cat物件後記憶體變化如下:
 Pet cat = new Pet();

七、小結

  1. 類與物件:
  • 類是一個模板,是抽象的
  • 物件是一個具體事例
  1. 物件的應用:
  • 引用型別:八大基本型別
  • 物件是透過引用來操作的:棧-->堆
  1. 屬性:欄位Field 成員變數
  • 預設初始化:
    • 數字:0 或 0.0
    • char:u0000
    • boolean:false
    • 引用:null
  1. 物件的建立與使用
  • 必須使用new 關鍵字創造物件
  • 必須掌握構造器
  • 物件的屬性:物件.屬性名;
  • 物件的方法:物件.方法名();
  1. 類:
  • 靜態的屬性:屬性
  • 動態的行為:方法

相關文章