Java中的基本操作單元 - 類和對象

寫在前面:博主是一隻經過實戰開發歷練後投身培訓事業的“小山豬”,暱稱取自動畫片《獅子王》中的“彭彭”,總是以樂觀、積極的心態對待周邊的事物。本人的技術路線從Java全棧工程師一路奔向大數據開發、數據挖掘領域,如今終有小成,願將昔日所獲與大家交流一二,希望對學習路上的你有所助益。同時,博主也想通過此次嘗試打造一個完善的技術圖書館,任何與文章技術點有關的異常、錯誤、注意事項均會在末尾列出,歡迎大家通過各種方式提供素材。

  • 對於文章中出現的任何錯誤請大家批評指出,一定及時修改。
  • 有任何想要討論和學習的問題可聯繫我:[email protected]
  • 發佈文章的風格因專欄而異,均自成體系,不足之處請大家指正。

Java中的基本操作單元 - 類和對象

本文關鍵字:類、屬性、行爲、實例化、對象

一、概念淺析

說到類和對象,這都是兩個比較抽象的詞,如果用在程序中,那就更不知道是什麼意思了。其實大家可以先不聯繫程序,我們在對一大堆東西分類的時候自然是有一個標準的,符合某些特徵的分到一類,符合另外一些特徵的分到另外一類。在每個類別中,每一樣東西都有相同的特徵,但是又有所差別,每一樣東西就好比一個一個的對象,是一個切切實實的東西,而分類的類別就好似是一個標準或者描述,會更抽象一些。

1. 類的概念

在編程中,我們通常會藉助程序去實現很多應用系統,來滿足日常生活中的需要,如網絡購物、人力資源管理等等。如果使用面向對象來開發,首先需要做的就是明確這個應用系統當中有哪些角色,這些角色都能夠使用哪些功能,每種角色都有哪些自己的特徵。
我們以一個教學管理系統爲例,主要的功能就是進行排課,記錄學生和教師的基本信息,記錄和統計學生的學習成績等。那這其中主要就涉及學生、教師、管理員三種角色,當有一批學生入學時,我們要將學生的信息錄入系統,這就好像我們一直在填的各種表格,每個學生需要採集的信息都是固定的,不同的是信息的內容。
在這裏插入圖片描述
這就好比我們定義了一個學生類,我們想要收集的學生信息就是對這個類別的描述,學生有學號、有院系、有其他的基本信息,這也是學生的固有特徵,於是我們可以用如下的代碼描述:

// 用於描述學生的類
public class Student{
    String sno;// 學號
    String name;// 姓名
    String college;// 學院
    String major;// 專業
    ...
}

2. 什麼是對象

理解了程序中類的概念和表示方式後,對象就比較好理解了。簡單來說對象就是按照類的標準創建出來的一個具體可以操作的東西,也就是一個個具體的學生。每個學生都具備相同的特徵,但是可以有不同的姓名、學院、專業等自己的信息。在程序運行時的體現就是內存中開闢了對應的空間,想要創建一個新的對象使用如下的代碼:

public class Test{
    public static void main(String[] args){
        // 變量類型 變量名稱 = new 類的構造器();
        Student student = new Student();
        // 大寫的Student就是我們要使用的學生類型,名稱必須完全一致
        // 小寫的student就是由學生類創建出來的對象的名稱
        // 也是我們操作對象時直接使用的名稱
        // new是用來創建對象的關鍵字,需要調用相應的構造器
        // 有關於構造器的用法會在後續文章詳細說明,初學可以記憶爲:類名();
    }
}

3. 類和對象的關係

從上面的例子中我們已經可以看到,類相當於是一個模板或是像工廠的圖紙,對象則相當於按照這個標準和模具創造出來的個體,每一個對象都具備相同的特徵。
在程序中的體現就是,使用class關鍵字定義一個類結構,然後在這個結構中對整個類進行描述,都具備哪些屬性,都可以產生行爲,但是隻有具體的對象可以具備具體的屬性值和產生具體的行爲(有關於靜態的聲明將在另外的文章中單獨說明)。

二、類

我們應該如何描述和定義一個類呢?我們最開始寫的HelloWorld不也是一個類嘛?爲什麼沒這麼多亂七八糟的概念?下面我們就來進一步解析。
從客觀世界的角度出發,比如小明上了大學,這就是一個具體的學生,他有學號、姓名、對應的學院、專業等等,這都是他個人的基本信息,除此之外,他還可以進行多種活動,比如選課、考試、修改自己的部分信息等等。
在這裏插入圖片描述
那麼我們從程序的角度出發,應該如何定義一個類呢?這取決於我們的需要,對於一個教學管理系統來說,我們關心的只是和學生學習相關的信息,學生能夠選課、考試等等。對於一個後勤管理系統來說,我們關心的則是學生的飯卡消費情況,出入宿舍的時間,學生能夠充值、消費、刷卡等等。所以如何定義和描述一個類,取決於我們的應用系統需要,或者是題目的要求。

1. 屬性

屬性指的就是所描述的類當前的狀態,也就是他自己的一些信息,直接在類下進行定義,和正常聲明一個變量的格式相同,可以不指定初始值。

2. 行爲

行爲指的就是當前這個類所創建出的對象都能進行什麼樣的行爲,在程序上的表現就是方法,可以被具體的對象來進行調用,在方法體中用代碼實現具體的功能。

// 用於描述學生的類
public class Student{
    // 學生類的屬性
    String sno;// 學號
    String name;// 姓名
    String college;// 學院
    String major;// 專業
    ...

    // 學生類的行爲
    public void study(){
        // 去學習
        System.out.println("去上課");
    }
    public void exam(){
        // 去考試
        System.out.println("去考試");
    }
}

3. 可執行類

在通常情況下,我們定義的一個類由四大部分構成:屬性、行爲、構造器以及其他繼承Object的方法。也就是說都不存在可以直接執行的main方法,而只是爲了定義一個我們想要使用的類,那麼怎麼樣才能調用到,把我們的類用起來呢?就是通過那些具備main方法的類,如最初我們使用的HelloWorld,這就是一個最簡形式的可執行類。

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

當然,我們也可以直接在類中添加main方法來測試運行,但是一般不會這樣做,因爲會有一些權限的問題不能夠測試完整,通常的辦法是新建一個單獨的測試類,來進行調用測試。

// 調用時需要將兩個類放在同一目錄下(同一包中)
public class Test{
    public static void main(String[] args){
        // 創建一個學生對象
        Student student = new Student();
        // 爲對象的屬性賦值
        student.sno = "1130050152";
        student.name = "小明";
        student.college = "數學科學學院";
        student.major = "信息與計算科學";
        // 顯示對象的屬性值
        System.out.println("該學生的名字是:" + student.name);
        // 通過對象調用方法,發生行爲
        student.study();
        student.exam();
    }
}

三、對象

通過上面我們已經知道對象的概念,以及如何使用創建和使用一個對象。接下來我們再來明確一下類和對象,對象和對象之間的關係。

1. 對象是類的實例

創建對象的過程也可以被稱之爲實例化,對象也可以被叫做類的實例。這個概念也很好理解,在類中只是定義了一系列的描述信息,真正去執行需要靠具體的對象,以一個類爲基準,可以創建出很多對象。

2. 對象和對象之間的關係

對象與對象之間存在共同點,除了使用靜態聲明的屬性外,是不會互相影響的,這是一個很重要的特點。當我們使用不同的對象去調用方法和輸出屬性信息時,雖然類當中的結構完全一致,但是由於對象所處的狀態(屬性值)可能不同,那麼方法執行的結果也會不同。

// 用於描述學生的類
public class Student{
    // 學生類的屬性
    String sno;// 學號
    String name;// 姓名
    double balance;// 餘額
    ...

    // 學生類的行爲
    public void recharge(double money){
        // 對學生卡充值
        balance += money;
        System.out.println("當前餘額爲" + balance);
    }
    public void getBalance(){
        // 顯示卡內餘額
        System.out.println("當前餘額爲" + balance);
    }
}
// 測試類:將兩個類放在同一目錄下(同一包中)
public class Test{
    public static void main(String[] args){
        // 創建第一個學生對象
        Student student1 = new Student();
        // 爲對象的屬性賦值
        student1.balance = 23.70;
        // 調用方法
        student1.getBalance();
        student1.recharge(100.0);
        // 創建第二個學生對象
        Student student2 = new Student();
        // 爲對象的屬性賦值
        student2.balance = 15.60;
        // 調用方法
        student2.getBalance();
        student2.recharge(50.0);
    }
}

程序執行完畢後可以再次輸出查看兩個對象的屬性值,不會互相影響。

Java小白修煉手冊

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