第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Java 類(lèi)和對(duì)象

經(jīng)過(guò)前面一系列的學(xué)習(xí),你可能對(duì)類(lèi)和對(duì)象已經(jīng)有了一定的了解,這是因?yàn)?Java 語(yǔ)言是純面向?qū)ο蟮木幊陶Z(yǔ)言,類(lèi)和對(duì)象在 Java 中無(wú)處不在。

在程序設(shè)計(jì)時(shí),我們針對(duì)事物的特征和行為使用代碼進(jìn)行實(shí)現(xiàn),就是面向?qū)ο缶幊?。可以毫不夸張地說(shuō),面向?qū)ο缶幊淌侵写笮晚?xiàng)目代碼最好的組織形式。

本小節(jié)我們將學(xué)習(xí)類(lèi)和對(duì)象的基本概念類(lèi)和對(duì)象的關(guān)系,除了字段和方法,在類(lèi)中都可以定義什么其他內(nèi)容。也會(huì)講解什么是實(shí)例化、實(shí)例化過(guò)程是怎樣的,構(gòu)造方法是什么如何定義以及其特點(diǎn),this 關(guān)鍵字的含義和使用

1. 類(lèi)和對(duì)象

1.1 什么是類(lèi)

我們?cè)谇懊娴膶W(xué)習(xí)中已經(jīng)知道,類(lèi) (class) 是一個(gè)程序的基本單位,我們之前所編寫(xiě)的 .java 文件都是類(lèi)。在現(xiàn)實(shí)生活中,慕課網(wǎng)學(xué)生可以是一個(gè)類(lèi)、交通工具可以是一個(gè)類(lèi)、NBA 球員可以是一個(gè)類(lèi)。例如,如下代碼聲明了一個(gè)慕課網(wǎng)學(xué)生類(lèi):

public class ImoocStudent {
    ...
}

1.2 什么是對(duì)象

你也許聽(tīng)到過(guò)一句話(huà):“萬(wàn)物皆對(duì)象”。是的,現(xiàn)實(shí)世界中所有的事物,都可以是對(duì)象。例如一個(gè)慕課網(wǎng)學(xué)生、一輛汽車(chē)、NBA 巨星喬丹等等,都是對(duì)象。 對(duì)象是具體的一個(gè)事物。下面我們來(lái)看一下類(lèi)和對(duì)象的關(guān)系。

1.3 類(lèi)和對(duì)象的關(guān)系

類(lèi)是一個(gè)抽象的概念,可以將它理解成 “模板”,可用于產(chǎn)生對(duì)象;而對(duì)象是一個(gè)具體的事物。

ImoocStudent 是一個(gè)類(lèi),毋庸置疑,它是抽象的,不能表示一個(gè)具體的事物;而屏幕面前的你作為慕課網(wǎng)學(xué)生,就是一個(gè)對(duì)象,因?yàn)槟闶菍?shí)實(shí)在在的、具體的一個(gè)慕課網(wǎng)學(xué)生,和你一樣的在慕課網(wǎng)學(xué)習(xí)的其他同學(xué),都可以理解為是由 ImoocStudent 類(lèi)產(chǎn)生的一個(gè)個(gè)具體的對(duì)象。

例如,很多 NBA 球星:科比、喬丹、詹姆斯等他們都是具體的球員,具體的球員就是對(duì)象,而這樣一組對(duì)象在代碼中可以抽象為類(lèi)

2. 定義類(lèi)

定義類(lèi)的語(yǔ)法,相信大家都已經(jīng)熟練掌握,下面我們就以慕課網(wǎng)學(xué)生為例,初步抽象出一個(gè)簡(jiǎn)單的慕課網(wǎng)學(xué)生類(lèi)。

Tips:在本小節(jié)的剩余內(nèi)容中,我們都將圍繞這個(gè)例子展開(kāi)學(xué)習(xí)。下面請(qǐng)跟上節(jié)奏認(rèn)真思考。

2.1 慕課網(wǎng)學(xué)生類(lèi)

在代碼中,事物的靜態(tài)特征被抽象成屬性,事物的動(dòng)態(tài)行為被抽象成方法。一個(gè)基本的慕課網(wǎng)學(xué)生類(lèi)可以包含若干屬性方法。

慕課網(wǎng)學(xué)生可以有昵稱(chēng)、職位、城市、性別等特征,如下是慕課網(wǎng)個(gè)人中心的截圖:

除了這些特征,還可以有學(xué)習(xí)課程、評(píng)論、發(fā)表手記等行為。有了這些特征和行為,我們就可以抽象出一個(gè)慕課網(wǎng)學(xué)生類(lèi):

public class ImoocStudent {
    // 定義屬性(特征)
    String nickname;  // 昵稱(chēng)

    String position;  // 職位

    String city;      // 城市

    String sex;          // 男 | 女

    // 定義方法(行為)
    public void studyCourse() {
        System.out.println("學(xué)習(xí)課程");
    }

    public void postComment() {
        System.out.println("發(fā)表評(píng)論");
    }

    public void postArticle() {
        System.out.println("發(fā)表手記");
    }

}

2.2 組成類(lèi)的元素

Tips:類(lèi)組成元素屬于擴(kuò)展內(nèi)容,此處有一個(gè)整體認(rèn)識(shí)即可。隨著面向?qū)ο蟮纳钊雽W(xué)習(xí),知識(shí)點(diǎn)都會(huì)涵蓋。

剛剛我們通過(guò)對(duì)現(xiàn)實(shí)生活中慕課網(wǎng)學(xué)生的分析,抽象出了慕課網(wǎng)學(xué)生類(lèi),并在類(lèi)中定義了一些屬性和方法。那么除了屬性和方法,類(lèi)中還可以有什么其他元素呢?

下面我們來(lái)詳細(xì)介紹,每個(gè)類(lèi)都可以由以下元素組成:

  • 成員屬性:也稱(chēng)為字段,成員變量或?qū)嵗兞?,屬性是用以保?strong>每個(gè)對(duì)象的數(shù)據(jù)的變量,例如每個(gè)慕課網(wǎng)學(xué)生都可能有昵稱(chēng)、性別等。每個(gè)對(duì)象之間的屬性相互獨(dú)立,互不干擾;
  • 成員方法:也稱(chēng)實(shí)例方法,成員方法是對(duì)對(duì)象執(zhí)行的操作,例如,一個(gè)慕課網(wǎng)學(xué)生有一種方法來(lái)進(jìn)行發(fā)表評(píng)論;
  • 靜態(tài)變量:也稱(chēng)為類(lèi)屬性,它是同一個(gè)類(lèi)的任何對(duì)象所共有的。例如,一個(gè)慕課網(wǎng)學(xué)生類(lèi)中的最后一個(gè)被添加的學(xué)生 ID,可以用靜態(tài)變量標(biāo)記。 一個(gè)類(lèi)不管被實(shí)例化了多少對(duì)象,每個(gè)靜態(tài)變量在類(lèi)中僅存在一次;
  • 靜態(tài)方法:也稱(chēng)為類(lèi)方法,靜態(tài)方法是不影響特定對(duì)象的方法;
  • 內(nèi)部類(lèi):可以將一個(gè)類(lèi)包含在另一個(gè)類(lèi)中,常用于該類(lèi)僅提供給聲明它的類(lèi)使用的情況;
  • 構(gòu)造方法:生成新對(duì)象的特殊方法;
  • 參數(shù)化類(lèi)型:可以在定義期間將參數(shù)化類(lèi)型分配給類(lèi)。 參數(shù)化類(lèi)型將替換為在類(lèi)實(shí)例化時(shí)指定的類(lèi)型。 它由編譯器完成。 它類(lèi)似于 C 語(yǔ)言宏#define 語(yǔ)句,其中預(yù)處理器評(píng)估宏。

3. 對(duì)象的實(shí)例化

3.1 創(chuàng)建對(duì)象

上面我們已經(jīng)定義了慕課網(wǎng)學(xué)生類(lèi),有了類(lèi)就可以產(chǎn)生對(duì)象了。這里的產(chǎn)生對(duì)象指的就是對(duì)象的實(shí)例化操作,在 Java 中,使用 new 關(guān)鍵字實(shí)例化對(duì)象,其語(yǔ)法為:

類(lèi)名 對(duì)象名稱(chēng) = new 類(lèi)名();

類(lèi)是對(duì)象的類(lèi)型,因此我們以類(lèi)名作為對(duì)象類(lèi)型,對(duì)象名稱(chēng)的命名規(guī)范與變量相同。例如,實(shí)例化一個(gè)慕課網(wǎng)學(xué)生對(duì)象,對(duì)象名稱(chēng)命名為 student

ImoocStudent student = new ImoocStudent();

關(guān)于對(duì)象的實(shí)例化過(guò)程,可以分為兩部分:

  • 聲明對(duì)象:在內(nèi)存的??臻g中執(zhí)行。ImoocStudent student;
  • 實(shí)例化對(duì)象:在內(nèi)存的堆空間執(zhí)行。new ImoocStudent();

3.2 調(diào)用屬性和方法

對(duì)象實(shí)例化后,可以調(diào)用其屬性和方法,其語(yǔ)法為:

// 調(diào)用屬性
對(duì)象名.屬性名;
// 調(diào)用方法
對(duì)象名.方法名();

下面我們?cè)?ImoocStudent 類(lèi)的主方法中實(shí)例化一個(gè)慕課網(wǎng)學(xué)生對(duì)象,并依次調(diào)用其屬性和方法:

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class ImoocStudent {
    // 定義屬性(特征)
    String nickname;  // 昵稱(chēng)

    String position;  // 職位

    String city;      // 城市

    String sex;          // 男 | 女

    // 定義方法(行為)
    public void studyCourse() {
        System.out.println("學(xué)習(xí)課程");
    }

    public void postComment() {
        System.out.println("發(fā)表評(píng)論");
    }

    public void postArticle() {
        System.out.println("發(fā)表手記");
    }

    public static void main(String[] args) {
        // 實(shí)例化學(xué)生對(duì)象
        ImoocStudent student = new ImoocStudent();
        // 調(diào)用并打印成員屬性
        System.out.println("昵稱(chēng):" + student.nickname);
        System.out.println("職位:" + student.position);
        System.out.println("城市:" + student.city);
        System.out.println("性別:" + student.sex);
        // 調(diào)用成員方法
        student.studyCourse();
        student.postComment();
        student.postArticle();
    }

}
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線(xiàn)運(yùn)行效果

運(yùn)行結(jié)果:

昵稱(chēng):null
職位:null
城市:null
性別:null
學(xué)習(xí)課程
發(fā)表評(píng)論
發(fā)表手記

根據(jù)運(yùn)行結(jié)果,我們看到了成員屬性和成員方法都被成功調(diào)用。但所有的屬性值都為 null,這是因?yàn)槌蓡T屬性沒(méi)有默認(rèn)值,系統(tǒng)會(huì)給一個(gè)默認(rèn)初值。

Tips:不同數(shù)據(jù)類(lèi)型的屬性會(huì)有不同的初值。此例中的屬性,都為字符串,默認(rèn)初值為 null,你也可以嘗試為 ImoocStudent 類(lèi)添加其他類(lèi)型的屬性,來(lái)看看它們各自的默認(rèn)初值。這里不再一一演示。

3.3 給屬性賦值

給成員屬性賦值的語(yǔ)法為:

對(duì)象名.屬性名 = 屬性值;

下面我們來(lái)修改一下在主方法中的代碼:

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class ImoocStudent {
    // 定義屬性(特征)
    String nickname;  // 昵稱(chēng)

    String position;  // 職位

    String city;      // 城市

    String sex;       // 男 | 女

    // 定義方法(行為)
    public void studyCourse() {
        System.out.println("學(xué)習(xí)課程");
    }

    public void postComment() {
        System.out.println("發(fā)表評(píng)論");
    }

    public void postArticle() {
        System.out.println("發(fā)表手記");
    }

    public static void main(String[] args) {
        // 實(shí)例化學(xué)生對(duì)象
        ImoocStudent student = new ImoocStudent();
        // 給成員屬性賦值
        student.nickname = "Colorful";
        student.position = "服務(wù)端工程師";
        student.city = "北京";
        student.sex = "男";
        // 調(diào)用成員屬性
        System.out.println("昵稱(chēng):" + student.nickname);
        System.out.println("職位:" + student.position);
        System.out.println("城市:" + student.city);
        System.out.println("性別:" + student.sex);
    }
}
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線(xiàn)運(yùn)行效果

運(yùn)行結(jié)果:

昵稱(chēng):Colorful
職位:服務(wù)端工程師
城市:北京
性別:男

4. 構(gòu)造方法

4.1 概述

在類(lèi)中,可定義一個(gè)構(gòu)造方法,也稱(chēng)為構(gòu)造函數(shù)或構(gòu)造器。它用于一些初始化操作,構(gòu)造方法的語(yǔ)法為:

public 構(gòu)造方法名(參數(shù)) {
  	// 代碼塊
}

需要注意的是,與普通的自定義方法不同,構(gòu)造方法沒(méi)有返回類(lèi)型,并且方法名要與類(lèi)名同名

另外,如果我們沒(méi)有定義構(gòu)造方法,系統(tǒng)會(huì)有一個(gè)默認(rèn)的構(gòu)造方法。換句話(huà)說(shuō):任何一個(gè)類(lèi)都會(huì)有一個(gè)構(gòu)造方法。

構(gòu)造方法只能在對(duì)象的實(shí)例化時(shí)使用,也就是說(shuō),構(gòu)造方法只能配合 new 關(guān)鍵字使用。

根據(jù)參數(shù)的有無(wú),構(gòu)造方法可分為兩種:

  • 無(wú)參構(gòu)造方法
  • 有參構(gòu)造方法

4.2 無(wú)參構(gòu)造方法

ImoocStudent 類(lèi)中,我們可以定義一個(gè)無(wú)參構(gòu)造方法:

// 定義構(gòu)造方法,無(wú)返回值并且命名與類(lèi)名相同
public ImoocStudent() {
  	// 執(zhí)行輸出語(yǔ)句
  	System.out.println("無(wú)參構(gòu)造方法執(zhí)行了...");
}

使用 new 關(guān)鍵字調(diào)用構(gòu)造方法:

ImoocStudent student = new ImoocStudent();

運(yùn)行結(jié)果:

無(wú)參構(gòu)造方法執(zhí)行了...

4.3 有參構(gòu)造方法

當(dāng)創(chuàng)建實(shí)例對(duì)象時(shí),我們經(jīng)常需要同時(shí)初始化這個(gè)實(shí)例的成員屬性,例如:

ImoocStudent student = new ImoocStudent();
student.nickname = "慕女神";
student.position = "UI設(shè)計(jì)師";

雖然這樣能夠給我們的成員屬性進(jìn)行賦值,但每次需要編寫(xiě) 2 行這樣的代碼。能不能在創(chuàng)建對(duì)象時(shí),就對(duì)這些屬性進(jìn)行賦值呢?有參構(gòu)造方法解決了這樣的問(wèn)題,我們可以在 ImoocStudent 類(lèi)內(nèi)部定義一個(gè)有參構(gòu)造方法:

// 有參構(gòu)造方法
public ImoocStudent(String studentNickname, String studentPosition) {
    // 將參數(shù)變量賦值給實(shí)例變量
    nickname = studentNickname;
    position = studentPosition;
}

構(gòu)造函數(shù)中,我們將參數(shù)變量的值賦值給實(shí)例變量。使用 new 關(guān)鍵字調(diào)用構(gòu)造方法:

ImoocStudent student1 = new ImoocStudent("慕女神", "UI設(shè)計(jì)師");
System.out.println("昵稱(chēng)為:" + student1.nickname);
System.out.println("職位為:" + student1.position);

運(yùn)行結(jié)果:

昵稱(chēng)為:慕女神
職位為:UI設(shè)計(jì)師

你也可以增加構(gòu)造函數(shù)的參數(shù)數(shù)量,以用來(lái)給更多的實(shí)例屬性賦值:

// 有參構(gòu)造方法
public ImoocStudent(String studentNickname, String studentPosition, String studentCity, String studentSex) {
    nickname = studentNickname;
    position = studentPosition;
    city = studentCity;
    sex = studentSex;
}

構(gòu)造方法與普通方法相同,也會(huì)重載,因此類(lèi)中允許定義多個(gè)參數(shù)列表不同構(gòu)造方法。

需要特別注意的是,我們?cè)谏厦鎯蓚€(gè)有參構(gòu)造方法中,成員屬性的命名和參數(shù)變量的命名是不同的,如果參數(shù)列表中參數(shù)變量的命名和實(shí)例屬性相同。將無(wú)法完成對(duì)實(shí)例屬性的賦值,也就是說(shuō),下面的寫(xiě)法是錯(cuò)誤的:

public ImmocStudent(String nickname) {
  	nickname = nickname;
}

這是因?yàn)闃?gòu)造方法在參數(shù)的賦值過(guò)程中,會(huì)優(yōu)先到同一個(gè)作用范圍內(nèi)的 nickname 進(jìn)行賦值操作,這就是所謂的就近原則。這時(shí)我們可以使用 this 關(guān)鍵字。

5. this 關(guān)鍵字

為了解決上面無(wú)法使用與成員屬性同名稱(chēng)的參數(shù)對(duì)成員屬性進(jìn)行賦值的問(wèn)題,我們可以使用 this 關(guān)鍵字:

public ImmocStudent(String nickname) {
  	this.nickname = nickname;
}

在方法內(nèi)部,this 關(guān)鍵字是當(dāng)前對(duì)象的默認(rèn)引用,簡(jiǎn)單說(shuō),誰(shuí)調(diào)用了它誰(shuí)就是 this。因此,通過(guò) this.field 就可以訪問(wèn)當(dāng)前實(shí)例的字段,解決實(shí)例變量和參數(shù)變量名稱(chēng)沖突的問(wèn)題。

如下是本小節(jié)的最終實(shí)例代碼:

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class ImoocStudent {
    // 定義屬性(特征)
    String nickname;  // 昵稱(chēng)

    String position;  // 職位

    String city;      // 城市

    String sex;       // 男 | 女

    // 無(wú)參構(gòu)造方法
    public ImoocStudent() {
        // 執(zhí)行輸出語(yǔ)句
        System.out.println("無(wú)參構(gòu)造方法執(zhí)行了...");
    }

    // 有參構(gòu)造方法
    public ImoocStudent(String nickname, String position) {
        // 將參數(shù)變量賦值給實(shí)例變量
        this.nickname = nickname;
        this.position = position;
    }

    // 有參構(gòu)造方法
    public ImoocStudent(String nickname, String position, String city, String sex) {
        this.nickname = nickname;
        this.position = position;
        this.city = city;
        this.sex = sex;
    }

    // 定義方法(行為)
    public void studyCourse() {
        System.out.println("學(xué)習(xí)課程");
    }

    public void postComment() {
        System.out.println("發(fā)表評(píng)論");
    }

    public void postArticle() {
        System.out.println("發(fā)表手記");
    }

    public static void main(String[] args) {
        // 實(shí)例化學(xué)生對(duì)象
        ImoocStudent student = new ImoocStudent();
        // 給成員屬性賦值
        student.nickname = "Colorful";
        student.position = "服務(wù)端工程師";
        student.city = "北京";
        student.sex = "男";
        // 調(diào)用成員屬性
        System.out.println("昵稱(chēng):" + student.nickname);
        System.out.println("職位:" + student.position);
        System.out.println("城市:" + student.city);
        System.out.println("性別:" + student.sex);

        ImoocStudent student1 = new ImoocStudent("慕女神", "UI設(shè)計(jì)師");
        System.out.println("昵稱(chēng)為:" + student1.nickname);
        System.out.println("職位為:" + student1.position);
    }

}
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線(xiàn)運(yùn)行效果
無(wú)參構(gòu)造方法執(zhí)行了...
昵稱(chēng):Colorful
職位:服務(wù)端工程師
城市:北京
性別:男
昵稱(chēng)為:慕女神
職位為:UI設(shè)計(jì)師

6. 小結(jié)

本小節(jié)中,我們初步熟悉了 Java 中的類(lèi)和對(duì)象。我們?cè)賮?lái)回顧一下本小節(jié)的重點(diǎn)知識(shí):

在面向?qū)ο笾?,?lèi)和對(duì)象是 “模板” 和 “實(shí)例” 的關(guān)系。

類(lèi)中的實(shí)例變量是每個(gè)實(shí)例獨(dú)自擁有的,它們互不干擾。

關(guān)于對(duì)象的實(shí)例化,我們是使用 new 關(guān)鍵字 + 構(gòu)造方法名 () 來(lái)實(shí)現(xiàn)的。

當(dāng)類(lèi)內(nèi)部我們沒(méi)有顯示定義構(gòu)造方法時(shí),系統(tǒng)會(huì)自動(dòng)添加無(wú)參的構(gòu)造方法;當(dāng)在類(lèi)內(nèi)部顯示定義了構(gòu)造方法,系統(tǒng)不會(huì)自動(dòng)添加無(wú)參構(gòu)造方法。

this 關(guān)鍵字可以解決實(shí)例變量和參數(shù)變量沖突的問(wèn)題;this 關(guān)鍵字也可以調(diào)用同一類(lèi)中其他的成員方法。