溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的類和對象

發(fā)布時間:2020-05-27 15:03:18 來源:億速云 閱讀:965 作者:鴿子 欄目:編程語言

一、概念淺析

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

1. 類的概念

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

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

2. 什么是對象

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

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

3. 類和對象的關系

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

二、類

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

1. 屬性

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

2. 行為

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

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

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

3. 可執(zhí)行類

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

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

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

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

三、對象

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

1. 對象是類的實例

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

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

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

// 用于描述學生的類
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){
        // 創(chuàng)建第一個學生對象
        Student student1 = new Student();
        // 為對象的屬性賦值
        student1.balance = 23.70;
        // 調用方法
        student1.getBalance();
        student1.recharge(100.0);
        // 創(chuàng)建第二個學生對象
        Student student2 = new Student();
        // 為對象的屬性賦值
        student2.balance = 15.60;
        // 調用方法
        student2.getBalance();
        student2.recharge(50.0);
    }
}

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI