![單元5 面向?qū)ο蠡A(chǔ)_第1頁(yè)](http://file4.renrendoc.com/view8/M02/0A/17/wKhkGWbIoXeAGy8MAAFTShAhFDw414.jpg)
![單元5 面向?qū)ο蠡A(chǔ)_第2頁(yè)](http://file4.renrendoc.com/view8/M02/0A/17/wKhkGWbIoXeAGy8MAAFTShAhFDw4142.jpg)
![單元5 面向?qū)ο蠡A(chǔ)_第3頁(yè)](http://file4.renrendoc.com/view8/M02/0A/17/wKhkGWbIoXeAGy8MAAFTShAhFDw4143.jpg)
![單元5 面向?qū)ο蠡A(chǔ)_第4頁(yè)](http://file4.renrendoc.com/view8/M02/0A/17/wKhkGWbIoXeAGy8MAAFTShAhFDw4144.jpg)
![單元5 面向?qū)ο蠡A(chǔ)_第5頁(yè)](http://file4.renrendoc.com/view8/M02/0A/17/wKhkGWbIoXeAGy8MAAFTShAhFDw4145.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公務(wù)員購(gòu)房買(mǎi)賣(mài)合同標(biāo)準(zhǔn)文本
- 2025年醫(yī)療聯(lián)合服務(wù)合作協(xié)議
- 2025年反腐倡廉合作協(xié)議范本
- 2025年汽車(chē)買(mǎi)賣(mài)股份合同范本
- 2025年無(wú)錫c1貨運(yùn)從業(yè)資格證考試題下載
- 2025年中介金屬材料搬運(yùn)合同樣本
- 2025年昆明貨運(yùn)從業(yè)資格證考試模擬題
- 2025年防城港貨運(yùn)資格證模擬考試題
- 2025年果洛c1貨運(yùn)從業(yè)資格證考試題下載
- 2025年住宅購(gòu)買(mǎi)定金合同模版
- 2025年度化妝品電商平臺(tái)流量互換銷(xiāo)售合作合同
- 學(xué)習(xí)解讀2025年印發(fā)《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》課件
- 全過(guò)程造價(jià)咨詢(xún)服務(wù)的質(zhì)量、進(jìn)度、保密等保證措施
- 縣城屠宰場(chǎng)建設(shè)可行性研究報(bào)告
- 25學(xué)年六年級(jí)數(shù)學(xué)寒假作業(yè)《每日一練》
- 2025高考數(shù)學(xué)一輪復(fù)習(xí)-第8章-第3節(jié) 圓的方程【課件】
- DB3301T 1088-2018 杭州龍井茶栽培技術(shù)規(guī)范
- 環(huán)保行業(yè)深度研究報(bào)告
- 工程機(jī)械租賃服務(wù)方案及保障措施 (二)
- 保障性住房補(bǔ)貼委托書(shū)范本
- DB36T 1393-2021 生產(chǎn)安全風(fēng)險(xiǎn)分級(jí)管控體系建設(shè)通則
評(píng)論
0/150
提交評(píng)論