單元5 面向?qū)ο蠡A(chǔ)_第1頁(yè)
單元5 面向?qū)ο蠡A(chǔ)_第2頁(yè)
單元5 面向?qū)ο蠡A(chǔ)_第3頁(yè)
單元5 面向?qū)ο蠡A(chǔ)_第4頁(yè)
單元5 面向?qū)ο蠡A(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單元5面向?qū)ο蠡A(chǔ)面向?qū)ο蠡靖拍铑?lèi)與對(duì)象類(lèi)的封裝構(gòu)造方法

關(guān)鍵字訪(fǎng)問(wèn)權(quán)限Java是面向?qū)ο蟮木幊陶Z(yǔ)言,完全支持面向?qū)ο蟮奶匦浴1締卧攸c(diǎn)介紹面向?qū)ο蠡靖拍睢㈩?lèi)與對(duì)象、類(lèi)的封裝、構(gòu)造方法、this關(guān)鍵字、static關(guān)鍵字和訪(fǎng)問(wèn)權(quán)限。單元五面向?qū)ο蠡A(chǔ)教學(xué)目標(biāo)知識(shí)目標(biāo):技能目標(biāo):素養(yǎng)目標(biāo):了解面向?qū)ο蟮母拍钫莆疹?lèi)與對(duì)象的定義和使用理解類(lèi)的封裝和使用能夠恰當(dāng)運(yùn)用類(lèi)與對(duì)象編寫(xiě)程序能夠正確運(yùn)用this關(guān)鍵字和static關(guān)鍵字能夠獨(dú)立完成拓展任務(wù)懂得珍惜生命、珍惜感受生命的力量明白如何使自己更有價(jià)值熟悉關(guān)鍵字與訪(fǎng)問(wèn)權(quán)限5.1知識(shí)儲(chǔ)備–面向?qū)ο蠡靖拍蠲嫦驅(qū)ο蟮母拍铑?lèi)與對(duì)象的定義和使用類(lèi)的封裝和使用5.1.1面向?qū)ο蠡靖拍蠲嫦驅(qū)ο笫且环N程序設(shè)計(jì)方法,與結(jié)構(gòu)化程序設(shè)計(jì)方法相比,面向?qū)ο蟾拙S護(hù)、易復(fù)用、易擴(kuò)展,符合人類(lèi)認(rèn)識(shí)世界的思維方式。面向?qū)ο笫前熏F(xiàn)實(shí)中的事務(wù)抽象為程序設(shè)計(jì)中的對(duì)象,在Java語(yǔ)言中,常說(shuō)的一句話(huà)是“一切皆對(duì)象”。面向?qū)ο蟮幕舅枷胧前研枰鉀Q的問(wèn)題細(xì)化成若干個(gè)獨(dú)立的對(duì)象,通過(guò)對(duì)象間的配合、連接和協(xié)調(diào)能夠?qū)崿F(xiàn)大型復(fù)雜系統(tǒng)。5.1.1面向?qū)ο蠡靖拍蠲嫦驅(qū)ο缶哂腥筇匦裕悍庋b、繼承和多態(tài),下面簡(jiǎn)單介紹這三大特性。1.封裝(Encapsulation)封裝是Java面向?qū)ο蟮暮诵乃枷耄庋b有兩層含義,一是將事物的屬性和行為封裝成一個(gè)整體(對(duì)象),二是信息隱藏和數(shù)據(jù)安全,將不想讓外界知道的信息隱藏起來(lái),避免誤操作。例如,平常百姓使用手機(jī),只需要知道手機(jī)的使用方法,無(wú)需知道手機(jī)的構(gòu)造及工作原理。5.1.1面向?qū)ο蠡靖拍?.繼承(inheritance)繼承是Java面向?qū)ο蟮娘@著特性,主要用于描述類(lèi)與類(lèi)之間的關(guān)系,繼承是從已有的類(lèi)中派生出新的類(lèi),新的類(lèi)能吸收已有類(lèi)的數(shù)據(jù)屬性和行為,同時(shí)可擴(kuò)展新的能力。類(lèi)的繼承與現(xiàn)實(shí)生活的財(cái)產(chǎn)繼承相似,子女可繼承父母的財(cái)產(chǎn),同時(shí)也可以自己創(chuàng)造財(cái)富。通過(guò)繼承可以減少代碼的冗余,提高程序的可維護(hù)性、可擴(kuò)展性和開(kāi)發(fā)效率。5.1.1面向?qū)ο蠡靖拍?.多態(tài)(polymorphism)多態(tài)是Java面向?qū)ο蟮闹匾匦?,一個(gè)類(lèi)被繼承后,它的屬性、方法具有多種形態(tài),即同一屬性或者方法在不同的類(lèi)中代表著不同含義。例如,同樣的積木,不同人拼的東西不同,有人拼汽車(chē),有人拼機(jī)槍?zhuān)腥似垂肢F。5.1.1面向?qū)ο蠡靖拍?.1知識(shí)儲(chǔ)備–類(lèi)與對(duì)象類(lèi)對(duì)象通過(guò)對(duì)象調(diào)用類(lèi)中成員類(lèi)與對(duì)象是面向?qū)ο蟮淖钪匾⒆罨窘M成元素。類(lèi)是抽象的,是對(duì)象的模板。對(duì)象是具體的,是類(lèi)的實(shí)例。例如,學(xué)生是一個(gè)類(lèi),張大壯、李小飛、趙小倩都是學(xué)生類(lèi)的對(duì)象。學(xué)生類(lèi)可以有姓名、性別等變量(稱(chēng)為成員變量或?qū)傩裕瑫r(shí)有看書(shū)、寫(xiě)作等行為(稱(chēng)為成員方法)。每一個(gè)對(duì)象均有具體的姓名、性別等屬性(稱(chēng)為對(duì)象屬性),同時(shí)具備類(lèi)中的行為(稱(chēng)為對(duì)象方法),類(lèi)中的成員變量對(duì)應(yīng)著對(duì)象屬性,類(lèi)中的成員方法對(duì)應(yīng)對(duì)象方法,類(lèi)與對(duì)象的關(guān)系如圖5-1所示。5.1.2類(lèi)與對(duì)象5.1.2類(lèi)與對(duì)象1.類(lèi)類(lèi)是客觀(guān)事物的抽象,是具有相同事物特征和行為的統(tǒng)稱(chēng)。類(lèi)中主要包括成員變量和成員方法,其中成員變量描述事物的特征,通常用名詞表示,成員方法描述事物的行為,通常用動(dòng)詞表示。類(lèi)是Java的重要組成元素,所有Java程序都基于類(lèi)。類(lèi)的實(shí)質(zhì)是一種引用數(shù)據(jù)類(lèi)型,因?yàn)樗谋举|(zhì)是數(shù)據(jù)類(lèi)型,而不是數(shù)據(jù),一般情況下不能被直接操作,只有被實(shí)例化為對(duì)象時(shí),才會(huì)變得可操作,對(duì)象創(chuàng)建的前提是定義一個(gè)類(lèi)。5.1.2類(lèi)與對(duì)象(1)類(lèi)定義的一般格式[修飾符]class類(lèi)名{

成員變量;

成員方法;}5.1.2類(lèi)與對(duì)象(2)說(shuō)明修飾符:可選項(xiàng),通??梢杂胮ublic、protected、默認(rèn)(省略)、private來(lái)修飾,詳見(jiàn)本單元后面內(nèi)容。class:定義類(lèi)的關(guān)鍵字,不可缺省。類(lèi)名:合法的標(biāo)識(shí)符,符合見(jiàn)名知義的原則,首字母大寫(xiě),組成的多個(gè)單詞首字母均大寫(xiě),例如:學(xué)生類(lèi)名Student。一對(duì)大括號(hào){}:代表類(lèi)的主體內(nèi)容。成員變量:事物的外部特征,可通過(guò)對(duì)象的屬性來(lái)獲取。成員方法:事物的行為,可通過(guò)對(duì)象來(lái)調(diào)用。5.1.2類(lèi)與對(duì)象【例5-1】定義一個(gè)學(xué)生類(lèi)Student,需要包括學(xué)生的姓名(name)、性別(gender)和年齡(age)成員變量,同時(shí),需要體現(xiàn)學(xué)生的看書(shū)(read)和寫(xiě)作(write)的行為。(1)新建unit05工程,在工程unit05的src目錄下創(chuàng)建包.cvit.example01,在包.cvit.example01下創(chuàng)建類(lèi)Example01。5.1.2類(lèi)與對(duì)象(2)在example01.java文件中,創(chuàng)建Student類(lèi),并撰寫(xiě)代碼如圖5-3所示。5.1.2類(lèi)與對(duì)象提示:(1)此時(shí)的Java程序不能運(yùn)行,因沒(méi)有main方法,在文本編輯器視圖中也找不到運(yùn)行“”按鈕。(2)Student類(lèi)定義后,需要有實(shí)例化的對(duì)象,才能使用類(lèi)中的屬性和方法。(3)類(lèi)的成員變量,在成員方法中可以直接使用。5.1.2類(lèi)與對(duì)象2. 對(duì)象(1)創(chuàng)建對(duì)象的一般格式:格式1:類(lèi)名對(duì)象名稱(chēng)=null;對(duì)象名稱(chēng)=new類(lèi)名();格式2:類(lèi)名對(duì)象名稱(chēng)=new類(lèi)名();5.1.2類(lèi)與對(duì)象(2)說(shuō)明第一種格式分為兩步,第一步聲明對(duì)象變量,第二步實(shí)例化對(duì)象,第二種格式是將兩條語(yǔ)句合為一條語(yǔ)句來(lái)實(shí)現(xiàn)。null關(guān)鍵字代表引用類(lèi)型初值為空,new為實(shí)例化對(duì)象的關(guān)鍵字,對(duì)象名稱(chēng)為合法的標(biāo)識(shí)符,類(lèi)名后面的小括號(hào)中間無(wú)需空格。5.1.2類(lèi)與對(duì)象5.1.2類(lèi)與對(duì)象【例5-2】在5-1例題的基礎(chǔ)上,實(shí)例化Student對(duì)象stu1和stu2,并分別使用類(lèi)中的屬性和方法。操作步驟:(1)雙擊工程資源管理器窗口中的Example01.java文件,在Example01測(cè)試類(lèi)中,定義main方法。(2)在main方法中,實(shí)例化對(duì)象stu1和stu2,設(shè)置對(duì)象屬性的值,通過(guò)對(duì)象調(diào)用類(lèi)的方法。(3)在文本編輯器視圖中,程序完整的代碼如下:5.1.2類(lèi)與對(duì)象//Example01測(cè)試類(lèi)publicclassExample01{

publicstaticvoidmain(String[]args){

Studentstu1=newStudent();

//實(shí)例化對(duì)象stu1和stu2

Studentstu2=newStudent();

stu1.name="Tony";

//分別為stu1和stu2的屬性賦值

stu1.gender="male";

stu1.age=18;

stu2.name="Alice";

stu2.gender="female";

stu2.age=17;

stu1.read();

//通過(guò)對(duì)象stu1和stu2分別調(diào)用類(lèi)中的方法

stu1.write();

stu2.read();

stu2.write();

}

}5.1.2類(lèi)與對(duì)象

//Student類(lèi)classStudent{

//定義成員變量

Stringname;

//姓名

Stringgender;

//性別

intage;

//年齡

publicvoidread(){

//定義成員方法read

System.out.println(name+"isreading...");

}

publicvoidwrite(){

//定義成員方法write

System.out.println(name+"iswriting...");

}

}5.1.2類(lèi)與對(duì)象(4)單擊運(yùn)行按鈕,運(yùn)行程序,結(jié)果如圖5-3所示。運(yùn)行結(jié)果:5.1.2類(lèi)與對(duì)象例5-2通過(guò)new關(guān)鍵字實(shí)例化了兩個(gè)Student類(lèi)的對(duì)象stu1和stu2,在棧內(nèi)存中為stu1和stu2分配內(nèi)存空間,同時(shí)stu1和stu2將指向各自的堆內(nèi)存空間,如圖5-6所示。5.1.2類(lèi)與對(duì)象提示:在同一個(gè).java文件中可以創(chuàng)建多個(gè)類(lèi),但只能有一個(gè)使用public修飾符修飾的類(lèi),且類(lèi)名與.java文件同名。同一個(gè).java中的多個(gè)類(lèi)無(wú)先后順序之分,因?yàn)閹в衜ain方法的測(cè)試類(lèi)是程序的入口。對(duì)象通過(guò)“.”運(yùn)算符訪(fǎng)問(wèn)類(lèi)的成員變量和成員方法,訪(fǎng)問(wèn)成員變量的格式為,對(duì)象名.屬性名,訪(fǎng)問(wèn)成員方法的格式為,對(duì)象名.方法名()。5.1.2類(lèi)與對(duì)象初學(xué)者容易將一個(gè)類(lèi)嵌套到另外一個(gè)類(lèi)中,注意每一類(lèi)的右半個(gè)大括號(hào)的位置要放在類(lèi)的結(jié)束處,換句話(huà)說(shuō),類(lèi)與類(lèi)之間是并列關(guān)系,如圖5-5所示。5.1.2類(lèi)與對(duì)象5.1知識(shí)儲(chǔ)備–訪(fǎng)問(wèn)權(quán)限

public修飾符protected修飾符默認(rèn)修飾符private修飾符Java中的訪(fǎng)問(wèn)權(quán)限,是通過(guò)權(quán)限修飾符來(lái)控制成員能夠被訪(fǎng)問(wèn)的范圍,權(quán)限修飾符能夠修飾成員變量、成員方法、構(gòu)造方法和內(nèi)部類(lèi),不同權(quán)限修飾符限制的范圍不同。Java的訪(fǎng)問(wèn)權(quán)限修飾符有public、protected、缺省修飾符(包內(nèi)的)和private四種。權(quán)限修飾符的權(quán)限范圍由大到小的順序?yàn)椋簆ublic、protected、缺省修飾符和private。5.1.3訪(fǎng)問(wèn)權(quán)限1.public修飾符(公有的)public所修飾的類(lèi)、屬性和方法具有全局范圍的訪(fǎng)問(wèn)權(quán)限,如果一個(gè)類(lèi)中的成員被public修飾,該成員可以在所有類(lèi)中被訪(fǎng)問(wèn),無(wú)論是否在同一包中。2.protected修飾符(保護(hù)的)protected修飾符是受保護(hù)的訪(fǎng)問(wèn)權(quán)限,如果一個(gè)類(lèi)中的成員被protected修飾,該成員只能在本包的類(lèi)和不同包的子類(lèi)中被訪(fǎng)問(wèn)。5.1.3訪(fǎng)問(wèn)權(quán)限3.缺省修飾符(包內(nèi)的)缺省修飾符也默認(rèn)修飾符具有包類(lèi)的訪(fǎng)問(wèn)權(quán)限,如果一個(gè)類(lèi)中的成員缺省訪(fǎng)問(wèn)權(quán)限修飾符,該成員只能在本包內(nèi)的類(lèi)中被訪(fǎng)問(wèn)。4.private修飾符(私有的)private修飾符是私有的訪(fǎng)問(wèn)權(quán)限,如果一個(gè)類(lèi)中的成員被private修飾,該成員只能在本類(lèi)中被訪(fǎng)問(wèn)。5.1.3訪(fǎng)問(wèn)權(quán)限修飾符同一類(lèi)中同一包中的類(lèi)不同包的子類(lèi)不同包的所有類(lèi)private√缺省√√protected√√√public√√√√權(quán)限修飾符的訪(fǎng)問(wèn)范圍:5.1.3訪(fǎng)問(wèn)權(quán)限5.1知識(shí)儲(chǔ)備–類(lèi)的屬性封裝封裝的意義私有化類(lèi)的屬性公有化對(duì)應(yīng)屬性的方法Java類(lèi)的屬性封裝目的是將屬性隱藏起來(lái),避免外部類(lèi)的誤操作,確保代碼的復(fù)用性和安全性。屬性封裝是將類(lèi)中的屬性私有化,即使用private來(lái)修飾類(lèi)中的成員變量,并提供使用public修飾的getter和setter方法,外部類(lèi)可通過(guò)公有的方法進(jìn)行訪(fǎng)問(wèn)。下面分別以封裝前、后為例來(lái)體會(huì)封裝的必要性。.1.4類(lèi)的屬性封裝5.1.4類(lèi)的屬性封裝【例5-3】創(chuàng)建Student類(lèi),定義成員變量有name(姓名)、score(入學(xué)成績(jī))兩個(gè)屬性,不進(jìn)行封裝。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example02,在包.cvit.example02下創(chuàng)建類(lèi)Example02。(2)在Example02.java文件中創(chuàng)建Student類(lèi),定義成員變量name和score,定義成員方法info,用于打印輸出學(xué)生基本信息。(3)編寫(xiě)測(cè)試類(lèi)Example02,定義main方法,在main方法中實(shí)例化Student對(duì)象,通過(guò)使用stu對(duì)象的“.”運(yùn)算符修改成員變量的值,調(diào)用學(xué)生基本信息方法。(4)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.4類(lèi)的屬性封裝//創(chuàng)建學(xué)生類(lèi)

classStudent{

//定義成員變量姓名和入學(xué)成績(jī)

Stringname;

//姓名

intscore;

//成績(jī)

//定義學(xué)生基本信息方法

publicvoidinfo(){

System.out.println("姓名:"+name+";入學(xué)成績(jī):"+score);

}

}

//編輯測(cè)試類(lèi)

publicclassExample02{

publicstaticvoidmain(String[]args){

Studentstu=newStudent();

//實(shí)例化Student對(duì)象

stu.name="Alice";

//設(shè)置stu姓名屬性值

stu.score=-100;

//設(shè)置入學(xué)成績(jī)屬性值

stu.info();

//調(diào)用學(xué)生基本信息方法

}

}成績(jī)?yōu)樨?fù)數(shù)5.1.4類(lèi)的屬性封裝【例5-3】封裝前的Student類(lèi),年齡屬性(age)可任意修改。運(yùn)行結(jié)果:

5.1.4類(lèi)的屬性封裝【例5-4】封裝后的Student類(lèi),對(duì)入學(xué)成績(jī)屬性進(jìn)行范圍限制,范圍為【0,100】之間。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example03,在包.cvit.example03下創(chuàng)建類(lèi)Example03。(2)在example03.java文件中創(chuàng)建類(lèi)Student,屬性與方法同例5-3,不同的是用private修飾各屬性。5.1.4類(lèi)的屬性封裝(3)在文本編輯器的Student類(lèi)內(nèi)的任意空白處,單擊鼠標(biāo)右鍵,選擇“Generate”命令,如圖5-7所示。

圖5-7Generate命令5.1.4類(lèi)的屬性封裝(4)在彈出的菜單中,選擇“GetterandSetter”命令,如圖5-8所示。

圖5-8GetterandSetter命令5.1.4類(lèi)的屬性封裝(5)在彈出的對(duì)話(huà)框中,選中所有屬性,并單擊“OK”按鈕,如圖5-9所示。

圖5-9選擇需要添加方法的屬性5.1.4類(lèi)的屬性封裝(6)idea開(kāi)發(fā)工具將自動(dòng)添加相應(yīng)的getter和setter方法,分別為getName()、setName()、getScore()和setScore()方法,并將setScore()方法中的代碼進(jìn)行修改,確保入學(xué)成績(jī)范圍在【0,100】之間。(7)Student類(lèi)中,定義info(學(xué)生基本信息)方法。(8)編寫(xiě)測(cè)試類(lèi)Example03,添加main方法,在main方法中實(shí)例化Student對(duì)象,通過(guò)對(duì)象調(diào)用屬性的setter方法設(shè)置屬性值,并調(diào)用學(xué)生基本信息方法。(9)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.4類(lèi)的屬性封裝

package.cvit.example03;

classStudent{

//

封裝后的Student類(lèi)

privateStringname;

//定義成員變量姓名和入學(xué)成績(jī)

privateintscore;

publicStringgetName(){

//定義getter和setter方法

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetScore(){

returnscore;

}

publicvoidsetScore(intscore){

//限制錯(cuò)誤成績(jī)輸入

if(score<0||score>100){

System.out.println("輸入錯(cuò)誤,成績(jī)范圍為0-100之間。");

}else{

this.score=score;

}

}

publicvoidinfo(){

//定義學(xué)生基本信息方法

System.out.println("姓名:"+name+";入學(xué)成績(jī):"+score);

}

}限制成績(jī)范圍5.1.4類(lèi)的屬性封裝(10)在文本編輯器視圖中,單擊運(yùn)行“”按鈕,運(yùn)行程序,結(jié)果如圖5-10所示。從運(yùn)行結(jié)果看,給出了成績(jī)不能為負(fù)數(shù)的錯(cuò)誤提示,最終成績(jī)?yōu)?的原因是score沒(méi)有獲取到任何值,默認(rèn)值為0。5.1.4類(lèi)的屬性封裝提示:面向?qū)ο蟮姆庋b性不只是屬性封裝,而屬性封裝是必需的,通過(guò)屬性封裝讀者可以更好地理解封裝性的概念。通過(guò)private修飾的屬性,必須要有public修飾的getter和setter方法。如果想輸出正確的結(jié)果,可以在設(shè)置對(duì)象成績(jī)屬性時(shí),給出【0,100】范圍內(nèi)即可。5.1.4類(lèi)的屬性封裝5.1知識(shí)儲(chǔ)備–構(gòu)造方法構(gòu)造方法的特點(diǎn)無(wú)參構(gòu)造方法有參構(gòu)造方法構(gòu)造方法(Constructor)是在定義類(lèi)時(shí)創(chuàng)建的特殊方法,用來(lái)初始化類(lèi)的對(duì)象,通過(guò)new運(yùn)算符自動(dòng)調(diào)用。1. 構(gòu)造方法的特點(diǎn)(1)構(gòu)造方法名稱(chēng)與類(lèi)名相同(2)構(gòu)造方法無(wú)返回值類(lèi)型(3)參數(shù)個(gè)數(shù)為0個(gè)、1個(gè)或者多個(gè)(4)只能通過(guò)new運(yùn)算符調(diào)用5.1.5構(gòu)造方法2. 構(gòu)造方法的種類(lèi)(1)無(wú)參構(gòu)造方法類(lèi)的構(gòu)造方法不要求必須創(chuàng)建,在一個(gè)類(lèi)中沒(méi)有定義任何構(gòu)造方法時(shí),Java將自動(dòng)創(chuàng)建一個(gè)無(wú)參構(gòu)造方法,方法體內(nèi)容為空。如果類(lèi)中顯式地定義了一個(gè)或多個(gè)構(gòu)造方法,則Java不再提供默認(rèn)構(gòu)造方法。(2)有參構(gòu)造方法有參構(gòu)造方法的參數(shù)與類(lèi)的成員變量相關(guān),個(gè)數(shù)不能超類(lèi)的成員變量的個(gè)數(shù)。5.1.5構(gòu)造方法3. 說(shuō)明(1)如果構(gòu)造方法前添加了返回值類(lèi)型,編譯不會(huì)出錯(cuò),但該方法將被當(dāng)作普通方法使用,無(wú)構(gòu)造方法的功能。(2)有參構(gòu)造方法可以在實(shí)例化對(duì)象時(shí),直接為屬性賦值,能夠初始化數(shù)據(jù)。(3)構(gòu)造方法不能被子類(lèi)繼承。(4)在沒(méi)有介紹構(gòu)造方法前,使用的都是系統(tǒng)創(chuàng)建的默認(rèn)構(gòu)造方法。5.1.5構(gòu)造方法【例5-5】創(chuàng)建一個(gè)學(xué)生類(lèi)Student,三個(gè)成員變量分別分為name(姓名)、gender(性別)和age(年齡),一個(gè)打印個(gè)人信息的方法printInfo,一個(gè)無(wú)參構(gòu)造方法和一個(gè)有參構(gòu)造方法,通過(guò)構(gòu)造方法兩個(gè)對(duì)象stu1和stu2,設(shè)置屬性值后,打印輸出個(gè)人信息。5.1.5構(gòu)造方法操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example04,在包.cvit.example04下創(chuàng)建類(lèi)Example04。(2)在example04.java文件中創(chuàng)建類(lèi)Student。(3)在Student類(lèi)中定義成員變量、成員方法和構(gòu)造方法。(4)在Example04類(lèi)中添加main方法,在main方法中實(shí)例化對(duì)象stu1和stu2,設(shè)置無(wú)參構(gòu)造方法實(shí)例化的對(duì)象stu1的屬性值,并分別調(diào)用打印個(gè)人信息方法。(5)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.5構(gòu)造方法package.cvit.example04;

classStudent{

//定義學(xué)生類(lèi)

Stringname;

//定義成員變量姓名、性別和年齡

Stringgender;

intage;

Student(){}

//定義無(wú)參構(gòu)造方法

Student(Stringname,Stringgender,intage){

//定義有參構(gòu)造方法

this.name=name;

//將構(gòu)造方法中的參數(shù)賦值給當(dāng)前對(duì)象

this.gender=gender;

this.age=age;

}

publicvoidprintInfo(){

//定義顯示個(gè)人信息的方法

System.out.println("姓名:"+name+",性別:"+gender+",年齡"+age+"歲。");

}

}5.1.5構(gòu)造方法publicclassExample04{

publicstaticvoidmain(String[]args){

Studentstu1=newStudent();

//實(shí)例化無(wú)參對(duì)象stu1

stu1.name="Alice";

//設(shè)置stu對(duì)象的屬性值

stu1.gender="female";

stu1.age=17;

Studentstu2=newStudent("Tony","male",18);

//實(shí)例化有參對(duì)象stu2

stu1.printInfo();

//分別輸出對(duì)象的個(gè)人信息

stu2.printInfo();

}

}5.1.5構(gòu)造方法運(yùn)行結(jié)果:5.1.5構(gòu)造方法提示:若省略無(wú)參構(gòu)造方法,將出現(xiàn)編譯錯(cuò)誤。通過(guò)無(wú)參構(gòu)造方法實(shí)例化的對(duì)象,對(duì)象的屬性值需要單獨(dú)設(shè)置。通過(guò)有參構(gòu)造方法實(shí)例化的對(duì)象,可直接初始化數(shù)據(jù),因此,如果需要對(duì)實(shí)例化對(duì)象初始化數(shù)據(jù)時(shí),通常使用有參構(gòu)造方法來(lái)實(shí)現(xiàn)。構(gòu)造方法可以重載,即不同的構(gòu)造方法的參數(shù)類(lèi)型和個(gè)數(shù)可以不同。5.1.5構(gòu)造方法構(gòu)造方法的創(chuàng)建可以通過(guò)快捷方式完成,在需要?jiǎng)?chuàng)建構(gòu)造方法的類(lèi)中,單擊鼠標(biāo)右鍵,選擇“Generate”命令,在彈出的菜單中選擇“Construct”命令,在彈出的對(duì)話(huà)框中選擇需要的參數(shù),單擊“OK”按鈕即可,如圖5-13所示。5.1.5構(gòu)造方法5.1知識(shí)儲(chǔ)備–this關(guān)鍵字調(diào)用本類(lèi)中的成員變量調(diào)用本類(lèi)中的成員方法調(diào)用本類(lèi)中的構(gòu)造方法在Java程序開(kāi)發(fā)中,如果出現(xiàn)成員變量(類(lèi)中)和局部變量(方法中)重名時(shí),根據(jù)同名變量就近原則,需要在方法中使用this關(guān)鍵字來(lái)區(qū)分成員變量和方法變量。使用this關(guān)鍵字調(diào)用本類(lèi)中的屬性和方法時(shí),this關(guān)鍵字代表當(dāng)前對(duì)象,哪一個(gè)對(duì)象調(diào)用就代表哪一個(gè)對(duì)象,例如,學(xué)生類(lèi)中有參構(gòu)造方法中的this關(guān)鍵字,當(dāng)實(shí)例化對(duì)象stu1時(shí),this代表stu1,當(dāng)實(shí)例化對(duì)象stu2時(shí),this代表stu2。5.1.6this關(guān)鍵字this關(guān)鍵字主要有3種應(yīng)用,分別為調(diào)用本類(lèi)中的成員變量、成員方法和構(gòu)造方法。1.使用this關(guān)鍵字調(diào)用本類(lèi)中的屬性(成員變量)如果在成員變量和局部變量含義相同時(shí),使用不同的變量名稱(chēng)容易造成代碼混亂,使用相同變量名又出現(xiàn)名稱(chēng)沖突,由于局部變量(方法變量)優(yōu)先于全局變量(成員變量),因此,使用this關(guān)鍵字調(diào)用類(lèi)中成員變量的方法來(lái)解決。5.1.6this關(guān)鍵字【例5-6】使用this關(guān)鍵字區(qū)別成員變量和局部變量。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example05,在包.cvit.example05下創(chuàng)建類(lèi)Example05。(2)在example05.java文件中創(chuàng)建類(lèi)Student。(3)在Student類(lèi)中定義成員變量、成員方法和構(gòu)造方法。(4)在Example05類(lèi)中添加main方法,在main方法中實(shí)例化對(duì)象stu1,通過(guò)stu1調(diào)用打印個(gè)人信息方法。(5)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.6this關(guān)鍵字package.cvit.example05;

/**

*this關(guān)鍵字調(diào)用本類(lèi)中的屬性

*/

//1.定義學(xué)生類(lèi)

classStudent{

Stringname;

//定義成員變量姓名處年齡

intage;

Student(Stringname,intage){

//定義有參構(gòu)造方法

//--代表本類(lèi)的成員變量,name--代表構(gòu)造方法中的局部變量

this.name=name;

//this.age--代表本類(lèi)的成員變量,age--代表構(gòu)造方法中的局部變量

this.age=age;

}

//定義顯示個(gè)人信息的方法

publicvoidprintInfo(){

System.out.println("姓名:"+name+",年齡"+age+"歲。");

}

}5.1.6this關(guān)鍵字【例5-6】使用this關(guān)鍵字區(qū)別成員變量和局部變量。publicclassExample05{

publicstaticvoidmain(String[]args){

//2.1實(shí)例化對(duì)象stu,通過(guò)new運(yùn)算符調(diào)用有參構(gòu)造方法,構(gòu)造方法中的this關(guān)鍵字代表stu對(duì)象

Studentstu=newStudent("張爽",18);

//2.2調(diào)用打印個(gè)人信息方法

stu.printInfo();}

}

5.1.6this關(guān)鍵字運(yùn)行結(jié)果:5.1.6this關(guān)鍵字提示:如果去掉有參構(gòu)造方法中的this關(guān)鍵字,即將代碼改為name=name;age=age;編譯不會(huì)出錯(cuò),但運(yùn)行結(jié)果中的姓名為null,年齡為0,說(shuō)明構(gòu)造方法中的賦值沒(méi)有成功,因?yàn)榫庉嬈鳠o(wú)法確定哪一個(gè)名稱(chēng)代表當(dāng)前對(duì)象的屬性。此例中沒(méi)有單獨(dú)定義無(wú)參構(gòu)造方法,如果通過(guò)無(wú)參構(gòu)造方法實(shí)例化對(duì)象將報(bào)錯(cuò)。2.使用this關(guān)鍵字調(diào)用本類(lèi)中的成員方法this關(guān)鍵字同樣可以代表當(dāng)前對(duì)象,調(diào)用本類(lèi)中的成員方法,即通過(guò)類(lèi)中的一個(gè)方法調(diào)用另外一個(gè)方法,用法同使用this關(guān)鍵字調(diào)用本類(lèi)中的屬性。5.1.6this關(guān)鍵字3.構(gòu)造方法是實(shí)例化對(duì)象時(shí)被Java虛擬機(jī)自動(dòng)調(diào)用,因此構(gòu)造方法不能像其它方法一樣通過(guò)對(duì)象來(lái)調(diào)用,可通過(guò)this關(guān)鍵字來(lái)調(diào)用構(gòu)造方法。(1)一般格式:this([參數(shù)列表]);(2)說(shuō)明this關(guān)鍵字必須放在構(gòu)造方法體中的首行,且只能出現(xiàn)一次。參數(shù)列表可缺省,各參數(shù)之間用逗號(hào)分隔。構(gòu)造方法不能遞歸調(diào)用,避免死循環(huán)。不能在兩個(gè)構(gòu)造方法不能互相調(diào)用。5.1.6this關(guān)鍵字【例5-7】通過(guò)this關(guān)鍵字,在無(wú)參構(gòu)造方法中調(diào)用有參構(gòu)造方法。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example06,在包.cvit.example06下創(chuàng)建類(lèi)Example06。(2)在example06.java文件中創(chuàng)建類(lèi)Student。(3)在Student類(lèi)中定義成員變量、成員方法。5.1.6this關(guān)鍵字(4)在Student類(lèi)中創(chuàng)建無(wú)參構(gòu)造方法和有參構(gòu)造諒地,并在無(wú)參構(gòu)造方法中調(diào)用有參構(gòu)造方法。(5)在Example06類(lèi)中添加main方法,在main方法中實(shí)例化對(duì)象stu1,通過(guò)stu1調(diào)用打印個(gè)人信息方法。(6)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.6this關(guān)鍵字package.cvit.example06;

classStudent{

//定義學(xué)生類(lèi)

Stringname;

//定義成員變量姓名,年齡

intage;

Student(){

//定義無(wú)參構(gòu)造方法

this(“Tony”,20);

//調(diào)用有參構(gòu)造方法

}

Student(Stringname,intage){

//定義有參構(gòu)造方法

this.name=name;

this.age=age;

}

publicvoidprintInfo(){

//定義顯示個(gè)人信息的方法

System.out.println("姓名:"+name+",年齡"+age+"歲。");

}

}調(diào)用有參構(gòu)造方法5.1.6this關(guān)鍵字publicclassExample06{

publicstaticvoidmain(String[]args){

//2.1通過(guò)無(wú)參構(gòu)造方法實(shí)例化學(xué)生對(duì)象

Studentstu=newStudent();

//2.2調(diào)用打印個(gè)人信息方法

stu.printInfo();

}

}

5.1.6this關(guān)鍵字運(yùn)行結(jié)果:提示:雖然通過(guò)無(wú)參構(gòu)造方法實(shí)例化的對(duì)象,但因?yàn)闊o(wú)參構(gòu)造方法調(diào)用了有參構(gòu)造方法,因此,同樣實(shí)現(xiàn)了初始化數(shù)據(jù)的目的。如果想在有參構(gòu)造方法中調(diào)用無(wú)參構(gòu)造方法,直接在有參構(gòu)造方法體內(nèi)第一行使用this()即可。5.1.6this關(guān)鍵字5.1知識(shí)儲(chǔ)備–static關(guān)鍵字靜態(tài)屬性靜態(tài)方法靜態(tài)代碼塊Java中的static關(guān)鍵字用于修飾成員變量和成員方法,被稱(chēng)為靜態(tài)屬性和靜態(tài)方法,可以通過(guò)類(lèi)名直接訪(fǎng)問(wèn)。靜態(tài)屬性和靜態(tài)方法不屬于任何獨(dú)立的對(duì)象,所有實(shí)例化對(duì)象共享靜態(tài)屬性和靜態(tài)方法。1. 靜態(tài)屬性在Java程序中,如果希望某個(gè)屬性被所有對(duì)象共享,可以使用static修飾成員變量,通過(guò)類(lèi)名直接訪(fǎng)問(wèn)。訪(fǎng)問(wèn)的一般格式:類(lèi)名.屬性名;5.1.7static關(guān)鍵字【例5-8】在學(xué)生類(lèi)Student中,增加一個(gè)專(zhuān)業(yè)靜態(tài)變量major,賦初值為“軟件技術(shù)”,編程實(shí)現(xiàn)輸出專(zhuān)業(yè)修改前后各對(duì)象信息。(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example07,在包.cvit.example07下創(chuàng)建類(lèi)Example07。(2)在example07.java文件中創(chuàng)建類(lèi)Student。5.1.7static關(guān)鍵字(3)在Student類(lèi)中定義成員變量、靜態(tài)變量、成員方法和構(gòu)造方法。(4)在Example07類(lèi)中添加main方法,在main方法中實(shí)例化對(duì)象stu1和stu2,輸出專(zhuān)業(yè)修改前各對(duì)象信息。(5)通過(guò)類(lèi)名調(diào)用靜態(tài)方法修改專(zhuān)業(yè),并輸出修改后各對(duì)象信息。(6)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.7static關(guān)鍵字package.cvit.example07;

//1.定義學(xué)生類(lèi)

classStudent{

//1.1定義成員變量

Stringname;

//定義變量姓名

staticStringmajor="軟件技術(shù)";

//定義靜態(tài)變量

intage;

//定義變量年齡

//1.2定義有參構(gòu)造方法

Student(Stringname,intage){

this.name=name;

this.age=age;

}

//1.3定義顯示個(gè)人信息的方法

publicvoidprintInfo(){

System.out.println("姓名:"+name+",專(zhuān)業(yè):"+major+",年齡:"+age+"歲。");

}

}5.1.7static關(guān)鍵字//測(cè)試類(lèi)publicclassExample07{

publicstaticvoidmain(String[]args){

//實(shí)例化對(duì)象

Studentstu1=newStudent("Alice",17);

Studentstu2=newStudent("Tony",20);

//調(diào)用打印個(gè)人信息方法

System.out.println("對(duì)象的初始信息:");

stu1.printInfo();

stu2.printInfo();

//修改靜態(tài)變量,通過(guò)類(lèi)名直接調(diào)用靜態(tài)方法

Student.major="大數(shù)據(jù)技術(shù)";

//再次調(diào)用打印個(gè)人信息方法

System.out.println("專(zhuān)業(yè)后的對(duì)象信息:");

stu1.printInfo();

stu2.printInfo();

}

}

類(lèi)名直接調(diào)用靜態(tài)方法5.1.7static關(guān)鍵字運(yùn)行結(jié)果:5.1.7static關(guān)鍵字提示:使用static修飾的成員變量被修改后,所有類(lèi)的實(shí)例對(duì)象相應(yīng)的屬性均被修改,實(shí)現(xiàn)了數(shù)據(jù)共享,例如對(duì)象stu1和stu2的專(zhuān)業(yè)同時(shí)被修改了。static只能修飾成員變量,不能修飾方法級(jí)或塊級(jí)變量。靜態(tài)成員變量可以通過(guò)類(lèi)名.成員變量名直接調(diào)用,無(wú)需實(shí)例化對(duì)象。5.1.7static關(guān)鍵字2.靜態(tài)方法在Java程序中,如果希望通過(guò)類(lèi)名直接調(diào)用成員方法,可以使用static修飾的成員方法來(lái)實(shí)現(xiàn),通過(guò)類(lèi)名直接訪(fǎng)問(wèn),訪(fǎng)問(wèn)方法同靜態(tài)屬性。訪(fǎng)問(wèn)的一般格式:類(lèi)名.方法名([參數(shù)列表]);其中的參數(shù)列表可缺省,各參數(shù)之間用逗號(hào)分隔。5.1.7static關(guān)鍵字【例5-9】在學(xué)生類(lèi)中添加一個(gè)看書(shū)靜態(tài)方法read,通過(guò)類(lèi)名調(diào)用該靜態(tài)方法。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example08,在包.cvit.example08下創(chuàng)建類(lèi)Example08。(2)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.7static關(guān)鍵字package.cvit.example08;

classStudent{

Stringname;

//姓名

intage;

//年齡

Student(Stringname,intage)

{

//定義有參構(gòu)造方法

this.name=name;

this.age=age;

}

publicvoidprintInfo(){

//定義顯示個(gè)人信息的方法

System.out.println("姓名:"+name+",年齡:"+age+"歲。");

}

publicstaticvoidread(){

//定義靜態(tài)方法read

System.out.println("正在看書(shū)...");

}

}靜態(tài)方法5.1.7static關(guān)鍵字運(yùn)行結(jié)果:提示:靜態(tài)方法只能訪(fǎng)問(wèn)靜態(tài)屬性和靜態(tài)方法,不能訪(fǎng)問(wèn)非靜態(tài)屬性和方法。靜態(tài)方法中不能使用this關(guān)鍵字,例如,read方法中不能使用this關(guān)鍵字調(diào)用本類(lèi)中的屬性。5.1.7static關(guān)鍵字3.靜態(tài)代碼塊代碼塊指是用大括號(hào)包圍起來(lái)的一段代碼,使用static修飾的代碼塊被稱(chēng)為靜態(tài)代碼塊,靜態(tài)代碼塊放置于類(lèi)中所有方法之外,靜態(tài)代碼塊只有在類(lèi)加載時(shí)被執(zhí)行一次,通常用來(lái)初始化數(shù)據(jù)?!纠?-10】靜態(tài)代碼塊演示。操作步驟:(1)在工程unit05的src目錄下創(chuàng)建包.cvit.example09,在包.cvit.example09下創(chuàng)建類(lèi)Example09。(2)文本編輯器視圖中,撰寫(xiě)代碼如下:5.1.7static關(guān)鍵字【例5-10】靜態(tài)代碼塊演示。package.cvit.example09;

publicclassExample09{

static{

System.out.println("靜態(tài)代碼塊...");

}

publicstaticvoidmain(String[]args){

System.out.println("main方法...");

}

}

靜態(tài)代碼塊5.1.7static關(guān)鍵字運(yùn)行結(jié)果:

提示:靜態(tài)代碼塊先于main方法執(zhí)行。一個(gè)類(lèi)中可以有多個(gè)靜態(tài)代碼塊,在類(lèi)初次被加載時(shí),依次執(zhí)行各靜態(tài)代碼塊。

5.1.7static關(guān)鍵字5.2任務(wù)實(shí)現(xiàn)

5.2.1任務(wù)1:學(xué)生基本信息5.2.2任務(wù)2:花的海洋1.任務(wù)描述通過(guò)類(lèi)與對(duì)象定義學(xué)生類(lèi)Stu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論