java程序設(shè)計(jì)-第三章-類與對(duì)象基礎(chǔ)_第1頁(yè)
java程序設(shè)計(jì)-第三章-類與對(duì)象基礎(chǔ)_第2頁(yè)
java程序設(shè)計(jì)-第三章-類與對(duì)象基礎(chǔ)_第3頁(yè)
java程序設(shè)計(jì)-第三章-類與對(duì)象基礎(chǔ)_第4頁(yè)
java程序設(shè)計(jì)-第三章-類與對(duì)象基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩121頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本章目標(biāo)掌握類和對(duì)象理解封裝會(huì)創(chuàng)立和使用對(duì)象1/39萬(wàn)物皆對(duì)象世界是由什么組成的?名勝人物品動(dòng)物,植物……

分類是人們認(rèn)識(shí)世界的一個(gè)很自然的過(guò)程,在日常生活中會(huì)不自覺(jué)地進(jìn)行分類2/39身邊的對(duì)象張浩李明收銀員員工號(hào)—10001

姓名—李明部門—財(cái)務(wù)部操作:收款打印賬單顧客姓名—張浩年齡—20體重—60kg操作:購(gòu)置商品3/403/39對(duì)象的特征——屬性屬性——對(duì)象具有的各種特征每個(gè)對(duì)象的每個(gè)屬性都擁有特定值例如:張浩和李明的年齡、姓名不一樣

20歲

張浩屬性

60kg顧客張浩4/39對(duì)象的特征——方法方法——對(duì)象執(zhí)行的操作對(duì)象:用來(lái)描述客觀事物的一個(gè)實(shí)體,由一組屬性和方法構(gòu)成打印賬單方法刷卡收銀員李明5/40收銀5/39對(duì)象的屬性和方法列出尼古拉斯·凱奇駕駛的這輛法拉利F360Spider的屬性和方法列出小狗對(duì)象的屬性和方法屬性:品牌:法拉利型號(hào):F360Spider

顏色:黃色價(jià)格:380萬(wàn)元方法:發(fā)動(dòng)停止加速屬性:顏色:白色方法:叫跑吃6/40提問(wèn)6/39封裝對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性對(duì)象的屬性和方法通常被封裝在一起,共同表達(dá)事物的特性,二者相輔相承,不能分割一輛汽車,有完好的零件和特定的顏色還應(yīng)具備開(kāi)動(dòng)、剎車等方法行為7/39小結(jié)說(shuō)一說(shuō)教室里的對(duì)象描述他們的屬性和方法顏色:黑色品牌:BENQ投影姓名:張三年齡:20學(xué)習(xí)類型:白熾燈開(kāi)關(guān)變亮變暗材制:木質(zhì)支撐物品提問(wèn)8/408/39從對(duì)象抽象出“類”轎車抽取出以下對(duì)象的共同特征〔屬性和方法〕問(wèn)題顧客9/39類顧客類轎車類

…………類是模子,定義對(duì)象將會(huì)擁有的特征〔屬性〕和行為〔方法〕類是對(duì)象的類型不同于int類型:具有方法各種口味的球狀冰淇淋10/4010/39類和對(duì)象的關(guān)系類是抽象的概念,僅僅是模板比方說(shuō):“人”對(duì)象是一個(gè)你能夠看得到、摸得著的具體實(shí)體小布什普京克林頓……“人”類特征(屬性)年齡體重行為(方法)衣食住行11/39Java是面向?qū)ο蟮恼Z(yǔ)言

所有Java程序都以類class為組織單元關(guān)鍵字class定義自定義的數(shù)據(jù)類型

publicclassHelloWorld{ publicstaticvoidmain(String[]args){ System.out.println("HelloWorld!!!"); }}12/40類的根本框架12/39Java類模板類將現(xiàn)實(shí)世界中的概念模擬到計(jì)算機(jī)程序中publicclass類名{//定義屬性局部屬性1的類型屬性1;屬性2的類型屬性2; …屬性n的類型屬性n;//定義方法局部方法1;方法2;…方法m;}語(yǔ)法13/39定義類定義一個(gè)類的步驟定義類名編寫類的屬性編寫類的方法14/39publicclassSchool{

//定義屬性

StringschoolName;

//學(xué)校名稱

intclassNumber;

//教室數(shù)目

intlabNumber;

//機(jī)房數(shù)目

//定義方法

publicvoidshowSchool(){

System.out.println(schoolName +classNumber+labNumber);

}}15/39如何創(chuàng)立和使用對(duì)象使用對(duì)象的步驟創(chuàng)立對(duì)象類名對(duì)象名=new類名();引用對(duì)象成員:使用“.”進(jìn)行以下操作引用類的屬性:對(duì)象名.屬性引用類的方法:對(duì)象名.方法名()SchoolmySchool=newSchool();myS=“西南交大";//給name屬性賦值mySchool.showSchool(); //調(diào)用showCenter()方法語(yǔ)法語(yǔ)法16/39創(chuàng)立和使用對(duì)象例如

一個(gè)景區(qū)根據(jù)游人的年齡收取不同價(jià)格的門票。請(qǐng)編寫游人類,根據(jù)年齡段決定能夠購(gòu)置的門票價(jià)格并輸出問(wèn)題分析游人類姓名年齡顯示姓名及門票價(jià)格17/4017/39創(chuàng)立和使用對(duì)象例如18/3919/39創(chuàng)立和使用對(duì)象例如小結(jié)類和對(duì)象的關(guān)系?如何創(chuàng)立和使用對(duì)象?提問(wèn)經(jīng)驗(yàn)利用MyEclipse自動(dòng)提示功能20/39面向?qū)ο蟆睴O〕的優(yōu)點(diǎn)面向?qū)ο笈c人類的思維習(xí)慣一致提高了程序的可重用性信息隱藏,提高了程序的可維護(hù)性和安全性21/39總結(jié)對(duì)象是用來(lái)描述客觀事物的一個(gè)實(shí)體類定義了對(duì)象將會(huì)擁有的特征〔屬性〕和行為〔方法〕類是對(duì)象的類型,對(duì)象是類的實(shí)例使用類的步驟定義類使用關(guān)鍵字class創(chuàng)建類的對(duì)象使用關(guān)鍵字new使用類的屬性和方法使用“.”操作符22/39本章目標(biāo)會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋23/38類的方法寫出獅子對(duì)象的“跑”方法、“叫”方法電動(dòng)玩具獅子屬性:顏色:黃色行為:跑叫按此按鈕,獅子開(kāi)始叫按此按鈕,獅子開(kāi)始跑問(wèn)題24/38類的方法例如AutoLion類代碼實(shí)現(xiàn)publicclassAutoLion{Stringcolor="黃色";

public

void

run(){System.out.println("正在以0.1米/秒的速度向前奔跑");}

public

String

bark(){Stringsound="大聲吼叫";

returnsound;}}方法體返回值類型方法名稱示例25/38如何定義類的方法類的方法定義類的某種行為〔或功能〕定義類的方法public

返回值類型方法名(){

//這里編寫方法的主體}步驟一:定義方法名以及返回值類型步驟二:編寫方法體語(yǔ)法方法的定義方法的名稱方法的主體方法返回值的數(shù)據(jù)類型26/38方法的返回值兩種情況如果方法具有返回值,方法中必須使用關(guān)鍵字return返回該值,返回值類型為該返回值的類型如果方法沒(méi)有返回值,返回值類型為voidpublicclassStudent{Stringname="張三";publicStringgetName(){

returnname;

}

//……}return表達(dá)式;作用:跳出方法、返回結(jié)果語(yǔ)法27/38publicclassStudent{Stringname="張三";publicvoidgetName(){

}

//……}方法調(diào)用方法是個(gè)“黑匣子”,完成某個(gè)特定的應(yīng)用程序功能,并返回結(jié)果方法調(diào)用:執(zhí)行方法中包含的語(yǔ)句

對(duì)象名.方法名();小明過(guò)生日,爸爸送他一個(gè)電動(dòng)獅子玩具,編程測(cè)試這個(gè)獅子能否正常工作語(yǔ)法問(wèn)題28/38方法調(diào)用publicclassAutoLion{Stringcolor="黃色";//顏色

/*跑*/publicvoidrun(){System.out.println("正在以0.1米/秒的速度向前奔跑。");}/*叫*/publicStringbark(){Stringsound="大聲吼叫";returnsound;}/*獲得顏色*/publicStringgetColor(){returncolor;}/*顯示獅子特性*/publicStringshowLion(){return"這是一個(gè)"+getColor()+"的玩具獅子!";}}publicclassTestLion{

publicstaticvoidmain(String[]args){AutoLionlion=newAutoLion();System.out.println(lion.showLion());lion.run();System.out.println(lion.bark());}}在類的方法中調(diào)用該類另一個(gè)方法在main()方法中調(diào)用類的方法29/38方法調(diào)用小結(jié)方法之間允許相互調(diào)用,不需要知道方法的具體實(shí)現(xiàn),實(shí)現(xiàn)重用,提高效率

情況舉例Student類的方法a()調(diào)用Student類的方法b(),直接調(diào)用publicvoida(){b();//調(diào)用b()}Student類的方法a()調(diào)用Teacher類的方法b(),先創(chuàng)建類對(duì)象,然后使用“.”調(diào)用publicvoida(){Teachert=newTeacher();

t.b();//調(diào)用Teacher類的b()}30/38publicclassStudent1{ publicvoidshowInfo(){

return"我是一名學(xué)生"; }}方法的返回值類型為void,方法中不能有return返回值!常見(jiàn)錯(cuò)誤4-1代碼閱讀31/38注意publicclassStudent2{ publicdoublegetInfo(){ doubleweight=95.5; doubleheight=1.69; returnweight,height; }}方法不能返回多個(gè)值!常見(jiàn)錯(cuò)誤4-2代碼閱讀32/38注意publicclassStudent3{ publicStringshowInfo(){ return"我是一名學(xué)生"; publicdoublegetInfo(){

doubleweight=95.5;

doubleheight=1.69; returnweight; } }}多個(gè)方法不能相互嵌套定義!常見(jiàn)錯(cuò)誤4-3publicclassStudent3{ publicStringshowInfo(){ return"我是一名學(xué)生"; } publicdoublegetInfo(){ doubleweight=95.5;

doubleheight=1.69; returnweight; }}代碼閱讀33/38注意publicclassStudent4{ intage=20;

if(age<20){ System.out.println("年齡不符合入學(xué)要求!"); } publicvoidshowInfo(){ return"我是一名學(xué)生"; }}不能在方法外部直接寫程序邏輯代碼!常見(jiàn)錯(cuò)誤4-4代碼閱讀34/38注意本章目標(biāo)會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋35/38成員變量和局部變量2-1變量聲明的位置決定變量作用域變量作用域確定可在程序中按變量名訪問(wèn)該變量的區(qū)域//…for(inta=0;a<4;a++){System.out.println("hello");}System.out.println(a);//…代碼錯(cuò)誤a的作用域僅在for循環(huán)中36/38成員變量和局部變量2-2誰(shuí)能使用這些變量?37/38變量1類型變量1;變量2類型變量2;變量3類型變量3;public返回類型方法1(){

變量4類型變量4;}public返回類型方法2(){

變量5類型變量5;}publicclassAutoLion{}AutoLion類的方法,其他類的方法方法1方法2成員變量局部變量局部變量問(wèn)題成員變量和局部變量的區(qū)別作用域不同局部變量的作用域僅限于定義它的方法成員變量的作用域在整個(gè)類內(nèi)部都是可見(jiàn)的初始值不同Java會(huì)給成員變量一個(gè)初始值Java不會(huì)給局部變量賦予初始值在同一個(gè)類中,成員變量和局部變量同名時(shí),局部變量具有更高的優(yōu)先級(jí)在同一個(gè)方法中,不允許有同名局部變量在不同的方法中,可以有同名局部變量注意38/38publicclassTest{intscore1=88;intscore2=98;publicvoidcalcAvg(){intavg=(score1+score2)/2;}publicvoidshowAvg(){System.out.println("平均分是:"+avg);}}常見(jiàn)錯(cuò)誤局部變量avg的作用域僅限于calcAvg()方法代碼閱讀39/38注意publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("請(qǐng)輸入Java成績(jī):");intjava=input.nextInt();

//……/*計(jì)算并顯示輸出*/inttotal=java+c+db;doubleavg=total/3;System.out.print("總成績(jī):"+total);System.out.print("\n平均分:"+avg);}面向?qū)ο蟮木幊獭睴OP〕ScoreCalc類和

Test類calcDiffTimecalcTotalScore()ScoreCalcshowTotalScore()calcAvg()showAvg()

main(){//程序入口

//計(jì)算并輸出總成績(jī)

//計(jì)算并輸出平均分

}Test調(diào)用調(diào)用類的方法實(shí)現(xiàn)某個(gè)特定的功能,其他類不需要知道它如何實(shí)現(xiàn),調(diào)用方法就可以了,不用重復(fù)寫代碼!面向?qū)ο螅∣O)思想40/38如果還要再執(zhí)行這個(gè)功能,難道還要重復(fù)再寫一遍?本章目標(biāo)會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋41/38JavaDoc注釋回憶學(xué)過(guò)的注釋方式單行注釋://這里是單行注釋多行注釋:/*這里是多行注釋,可以多行*/JavaDoc注釋:使用“/**”開(kāi)始和“*/”結(jié)束,用來(lái)注釋類、屬性和方法等/**

*mySchool類

*@authorJohn

*@version1.02016/06/21

*/描述信息@author:描述作者信息@version:描述版本信息42/38添加JavaDoc注釋為ScoreCalc類添加JavaDoc注釋/***ScoreCalc類*@author張小明*@version2.02013/06/01*/publicclassScoreCalc{ /**Java成績(jī)*/ intjava;

//... /** *計(jì)算總成績(jī) *@returntotal */ publicintcalcTotalScore(){ inttotal=java+c+db; returntotal; }

//...}方法的JavaDoc注釋屬性的JavaDoc注釋類的JavaDoc注釋問(wèn)題43/38如何生成JavaDoc文檔JavaDoc能夠從源代碼中抽取類、屬性、方法等的注釋,形成一個(gè)配套的API幫助文檔生成JavaDoc文檔使用命令行方式生成使用MyEclipse工具生成44/38總結(jié)定義類的方法必須包括以下三個(gè)局部方法的名稱方法返回值的類型方法的主體類的方法調(diào)用,使用如下兩種形式同一個(gè)類中的方法,直接使用“方法名()”調(diào)用不同類的方法,首先創(chuàng)立對(duì)象,再使用“對(duì)象名.方法名()”來(lái)調(diào)用在Java中,有成員變量和局部變量,它們的作用域各不相同JavaDoc注釋以“/**”開(kāi)頭,以“*/”結(jié)尾45/38本章目標(biāo)會(huì)定義帶參方法會(huì)使用帶參方法會(huì)創(chuàng)立包組織Java工程46/40為什么要用帶參數(shù)的方法工作原理新鮮桃汁新鮮蘋果汁新鮮梨汁輸出三種果汁47/40如何使用帶參數(shù)的方法3-1定義帶參數(shù)的方法調(diào)用帶參數(shù)的方法publicclassZhazhiJi{

publicStringzhazhi(Stringfruit){Stringjuice=fruit+"汁";returnjuice;}}/*調(diào)用zhazhi方法*/ZhazhiJimyZhazhiji=newZhazhiJi();StringmyFruit="蘋果";StringmyJuice=myZhazhi.zhazhi(myFruit);System.out.println(myJuice);參數(shù)列表:(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2…)調(diào)用方法,傳遞的參數(shù)要與參數(shù)列表一一對(duì)應(yīng)48/40如何使用帶參數(shù)的方法3-2<訪問(wèn)修飾符>返回類型<方法名>(<形式參數(shù)列表>){ //方法的主體}該方法允許被訪問(wèn)調(diào)用的權(quán)限范圍方法返回值的類型publicclassStudentsBiz{ String[]names=newString[30];

publicvoidaddName(Stringname){

//增加學(xué)生姓名

} publicvoidshowNames(){//顯示全部學(xué)生姓名 }}傳送給方法的形參列表一個(gè)形式參數(shù)沒(méi)有返回值語(yǔ)法示例定義帶參數(shù)的方法49/40如何使用帶參數(shù)的方法3-3publicstaticvoidmain(String[]args){

StudentsBizst=newStudentsBiz();Scannerinput=newScanner(System.in);for(inti=0;i<5;i++){System.out.print("請(qǐng)輸入學(xué)生姓名:");StringnewName=input.next();

st.addName(newName);}st.showNames();

}實(shí)參的類型、數(shù)量、順序都要與形參一一對(duì)應(yīng)先實(shí)例化對(duì)象,再使用方法調(diào)用帶參數(shù)的方法對(duì)象名.方法名〔參數(shù)1,參數(shù)2,……,參數(shù)n〕實(shí)參列表語(yǔ)法示例50/40帶多個(gè)參數(shù)的方法2-1設(shè)計(jì)方法,通過(guò)傳遞三個(gè)參數(shù)〔開(kāi)始位置、結(jié)束位置、查找的姓名〕來(lái)實(shí)現(xiàn)在保存了多個(gè)學(xué)生姓名的數(shù)組中,指定查找區(qū)間,查找某個(gè)學(xué)生姓名并顯示是否查找成功問(wèn)題分析51/40

publicbooleansearchName

(intstart,intend,Stringname){ booleanfind=false;//是否找到標(biāo)識(shí) //指定區(qū)間數(shù)組中,查找姓名 for(inti=start-1;i<end;i++){

if(names[i].equals(name)){

find=true;

break;

} } returnfind;}返回值類型帶有三個(gè)形參返回結(jié)果:boolean類型帶多個(gè)參數(shù)的方法2-2if(st.searchName(s,e,name)){ System.out.println("找到了!");}else{ System.out.println("沒(méi)找到該學(xué)生!");}傳遞三個(gè)實(shí)參示例52/40//方法定義publicvoidaddName(Stringname){ //方法體}//方法調(diào)用對(duì)象名.addName(String"張三");調(diào)用方法時(shí)不能指定實(shí)參類型!常見(jiàn)錯(cuò)誤4-1對(duì)象名.addName("張三");代碼閱讀注意53/40//方法定義publicbooleansearchName(intstart,intend,Stringname){ //方法體}//方法調(diào)用Strings="開(kāi)始";inte=3;Stringname="張三";booleanflag=對(duì)象名.searchName(s,e,name);形參和實(shí)參數(shù)據(jù)類型不一致!常見(jiàn)錯(cuò)誤4-2代碼閱讀注意54/40//方法定義publicbooleansearchName(intstart,intend,Stringname){ //方法體}//方法調(diào)用ints=1;inte=3;booleanflag=對(duì)象名.searchName(s,e);形參和實(shí)參數(shù)量不一致!常見(jiàn)錯(cuò)誤4-3代碼閱讀注意55/40//方法定義publicbooleansearchName(intstart,intend,Stringname){ //方法體}//方法調(diào)用ints=1;inte=3;Stringname="張三";對(duì)象名.searchName(s,e,name);調(diào)用方法后沒(méi)有對(duì)返回值作任何處理!常見(jiàn)錯(cuò)誤4-4代碼閱讀注意56/40數(shù)組作為參數(shù)的方法2-1將5位學(xué)員的決賽成績(jī)保存在數(shù)組中設(shè)計(jì)求平均成績(jī)、最高成績(jī)的方法,并把數(shù)組作為參數(shù)有5位學(xué)員參加了Java知識(shí)競(jìng)賽的決賽,輸出決賽的平均成績(jī)和最高成績(jī)問(wèn)題分析57/40publicdoublecalAvg(int[]scores){intsum=0;doubleavg=0.0;for(inti=0;i<scores.length;i++){sum+=scores[i];}avg=(double)sum/scores.length;returnavg;}返回值類型數(shù)組作為參數(shù)的方法2-2示例publicintcalMax(int[]scores){intmax=scores[0];for(inti=1;i<scores.length;i++){if(max<scores[i]){max=scores[i];}}returnmax;}int[]scores=newint[5];//保存比賽成績(jī)//……doubleavgScore=st.calAvg(scores);intmaxScore=st.calMax(scores);數(shù)組參數(shù)調(diào)用方法58/40對(duì)象作為參數(shù)的方法2-1方式一:設(shè)計(jì)帶四個(gè)參數(shù)〔學(xué)號(hào)、姓名、年齡、成績(jī)〕的方法方式二:將學(xué)生學(xué)號(hào)、姓名、年齡、成績(jī)封裝在學(xué)生對(duì)象中,設(shè)計(jì)方法,以學(xué)生對(duì)象作為參數(shù)在實(shí)現(xiàn)了增加一個(gè)學(xué)生姓名的根底上,增加學(xué)生的學(xué)號(hào)、年齡和成績(jī),并顯示這些信息,如何實(shí)現(xiàn)?問(wèn)題分析可以將多個(gè)相關(guān)的信息封裝成對(duì)象,作為參數(shù)傳遞,防止方法有太多的參數(shù)!經(jīng)驗(yàn)59/40classStudent{

publicintid;publicStringname;publicintage;publicintscore; publicvoidshowInfo(){ System.out.println(id+"\t"+name+"\t"+age+"\t"+score);}}學(xué)生類對(duì)象作為參數(shù)的方法2-2示例publicvoidaddStudent(Studentstu){for(inti=0;i<students.length;i++){if(students[i]==null){students[i]=stu;break;}}//……studentsBiz.addStudent(student1);studentsBiz.addStudent(student2);對(duì)象參數(shù)調(diào)用方法60/40本章目標(biāo)會(huì)定義帶參方法會(huì)使用帶參方法會(huì)創(chuàng)立包組織Java工程61/40為什么需要包Windows樹(shù)形文件系統(tǒng)文檔分門別類,易于查找和管理使用目錄解決文件同名沖突問(wèn)題如何存放兩個(gè)同名的類而不沖突?Sort.java插入排序Sort.java冒泡排序問(wèn)題62/40包解決類的同名問(wèn)題允許類組成較小的單元〔類似文件夾〕,易于找到和使用相應(yīng)的文件防止命名沖突更好的保護(hù)類、屬性和方法Sort.java包63/40如何創(chuàng)立包packageedu.swjtu.javaclass;//聲明包publicclassMySchool{//……publicStringtoString(){//……}}包名用package聲明包,以分號(hào)結(jié)尾作為Java源代碼第一條語(yǔ)句示例64/40包命名標(biāo)準(zhǔn)包名由小寫字母組成,不能以圓點(diǎn)開(kāi)頭或結(jié)尾包名之前最好加上唯一的前綴,通常使用組織倒置的網(wǎng)絡(luò)域名

包名后續(xù)局部依不同機(jī)構(gòu)內(nèi)部的標(biāo)準(zhǔn)不同而不同packagemypackage;package

net.javagroup.mypackage;package

net.javagroup.research.powerproject;部門名工程名package.mypackage;×65/40用MyEclipse創(chuàng)立包使用MyEclipse創(chuàng)立包的兩種方法分別創(chuàng)立包和類創(chuàng)立類的過(guò)程中創(chuàng)立類所在的包66/40包與目錄的關(guān)系創(chuàng)立好的包和Java源文件是如何存儲(chǔ)的?創(chuàng)立包edu.swjtu.javaclass,即創(chuàng)立了目錄結(jié)構(gòu):edu\swjtu\javaclasseduswjtujavaclassMySchool.javaHelloAccp.java問(wèn)題67/40如何導(dǎo)入包為了使用不在同一包中的類,需要在Java程序中使用import關(guān)鍵字導(dǎo)入這個(gè)類importjava.util.*;//導(dǎo)入java.util包中所有類關(guān)鍵字import并不陌生import包名.類名;1.系統(tǒng)包:java.util2.自定義包:*:指包中的所有類MySchool:指包中的AccpSchool類語(yǔ)法68/40總結(jié)帶參方法定義的一般形式形參是在定義方法時(shí)對(duì)參數(shù)的稱呼實(shí)參是在調(diào)用方法時(shí)傳遞給方法的實(shí)際的值調(diào)用帶參方法時(shí)要求實(shí)參與形參要匹配創(chuàng)立包使用關(guān)鍵字package導(dǎo)入包使用關(guān)鍵字import<訪問(wèn)修飾符>返回類型<方法名>(<參數(shù)列表>){//方法的主體}69/4070目錄2.1方法重載2.2類的訪問(wèn)控制2.3構(gòu)造方法2.4類變量2.5應(yīng)用舉例71方法重載方法重載一個(gè)類中名字相同的多個(gè)方法這些方法的參數(shù)必須不同,Java可通過(guò)參數(shù)列表的不同來(lái)區(qū)分重載的方法或者參數(shù)個(gè)數(shù)不同或者參數(shù)類型不同返回值可以相同,也可以不同重載的價(jià)值在于它允許通過(guò)使用一個(gè)方法名來(lái)訪問(wèn)多個(gè)方法1方法重載72通過(guò)方法重載分別接收一個(gè)或幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)classMethodOverloading{ publicvoidreceive(inti){ System.out.println("Receiveoneintparameter."); System.out.println("i="+i); } publicvoidreceive(doubled){ System.out.println("Receiveonedoubleparameter."); System.out.println("d="+d); } publicvoidreceive(Strings){ System.out.println("ReceiveoneStringparameter."); System.out.println("s="+s); } 1方法重載方法重載(續(xù))

——例73

publicvoidreceive(inti,intj){ System.out.println("Receivetwointparameters."); System.out.println("i="+i+"j="+j); } publicvoidreceive(inti,doubled){("Receiveoneintparameterandonedoubleparameter."); System.out.println("i="+i+"d="+d); } }publicclassExamp3_17{ publicstaticvoidmain(Stringargs[]){ MethodOverloadingm=newMethodOverloading(); m.receive(2); m.receive(5.6); m.receive(3,4); m.receive(7,8.2); m.receive("Isitfun?"); }}1方法重載方法重載(續(xù))

——例74運(yùn)行結(jié)果Receiveoneintparameter.i=2Receiveonedoubleparameter.d=5.6Receivetwointparameters.i=3j=4Receiveoneintparameterandonedoubleparameter.i=7d=8.2ReceiveoneStringparameter.s=Isitfun?1方法重載1方法重載(續(xù))

——例運(yùn)行結(jié)果75目錄2.1方法重載2.2

類的訪問(wèn)控制2.3構(gòu)造方法2.4類變量2.5應(yīng)用舉例什么是封裝面向?qū)ο笕筇卣髦弧庋b封裝的概念封裝的好處封裝:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問(wèn),而是通過(guò)該類提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)隱藏類的實(shí)現(xiàn)細(xì)節(jié)只能通過(guò)規(guī)定方法訪問(wèn)數(shù)據(jù)方便參加控制語(yǔ)句方便修改實(shí)現(xiàn)如何使用封裝封裝的步驟修改屬性的可見(jiàn)性1在getter/setter方法中加入屬性控制語(yǔ)句3創(chuàng)建公有的getter/setter方法2設(shè)為private用于屬性的讀寫對(duì)屬性值的合法性進(jìn)行判斷78類的訪問(wèn)控制類的訪問(wèn)控制只有public〔公共類〕及無(wú)修飾符〔缺省類〕兩種訪問(wèn)權(quán)限符與訪問(wèn)能力之間的關(guān)系如表類型無(wú)修飾public同一包中的類yesyes不同包中的類noyes2類的訪問(wèn)控制類的訪問(wèn)控制79類成員的訪問(wèn)控制公有(public)可以被其他任何對(duì)象訪問(wèn)(前提是對(duì)類成員所在的類有訪問(wèn)權(quán)限)保護(hù)(protected)只可被同一類及其子類的實(shí)例對(duì)象訪問(wèn)私有(private)只能被這個(gè)類本身訪問(wèn),在類外不可見(jiàn)默認(rèn)(default)僅允許同一個(gè)包內(nèi)的訪問(wèn);又被稱為“包〔package)訪問(wèn)權(quán)限”2類的訪問(wèn)控制類的訪問(wèn)控制80類型private無(wú)修飾protectedpublic同一類yesyesyesyes同一包中的子類noyesyesyes同一包中的非子類noyesyesyes不同包中的子類nonoyesyes不同包中的非子類nononoyes2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))81Circle類,給實(shí)例變量加上private修飾符publicclassCircle{staticdoublePI=3.14159265;privateintradius; publicdoublecircumference(){return2*PI*radius;}}2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))

——例82編譯CircumferenceTester.javapublicclassCircumferenceTester{publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();

c1.radius=50;Circlec2=newCircle();

c2.radius=10;

doublecircum1=c1.circumference();doublecircum2=c2.circumference();("Circle1hascircumference"+circum1);

("Circle2hascircumference"+circum2);

}}2類的訪問(wèn)控制2.2.6類的訪問(wèn)控制(續(xù))

——例83編譯時(shí)會(huì)提示出錯(cuò)在編譯語(yǔ)句“c1.radius=50;”及“c2.radius=10;”時(shí)會(huì)提示存在語(yǔ)法錯(cuò)誤“radiushasprivateaccessinCircle”說(shuō)明由于在Circle類聲明中變量radius被聲明為private,因此在其它類中不能直接對(duì)radius進(jìn)行存取如果要允許其它類訪問(wèn)radius的值,就需要在Circle類中聲明相應(yīng)的公有方法。通常有兩類典型的方法用于訪問(wèn)屬性值,get方法及set方法2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))

——例編譯84get方法功能是取得屬性變量的值get方法名以“get”開(kāi)頭,后面是實(shí)例變量的名字一般具有以下格式:public<fieldType>get<FieldName>(){return<fieldName>;}對(duì)于實(shí)例變量radius,聲明其get方法如下:publicintgetRadius(){returnradius;}2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))

——get方法85set方法功能是修改屬性變量的值set方法名以“set”開(kāi)頭,后面是實(shí)例變量的名字一般具有以下格式publicvoidset<FieldName>(<fieldType><paramName>){<fieldName>=<paramName>;}聲明實(shí)例變量radius的set方法如下:publicvoidsetRadius(intr){radius=r;}2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))

——set方法86關(guān)鍵字this的使用如果形式參數(shù)名與實(shí)例變量名相同,那么需要在實(shí)例變量名之前加this關(guān)鍵字,否那么系統(tǒng)會(huì)將實(shí)例變量當(dāng)成形式參數(shù)。在上面的set方法中,如果形式參數(shù)為radius,那么需要在成員變量radius之前加上關(guān)鍵字this。代碼如下:publicvoidsetRadius(intradius){this.radius=radius;}2類的訪問(wèn)控制類的訪問(wèn)控制(續(xù))

——set方法87目錄2.1方法重載2.2類的訪問(wèn)控制2.3構(gòu)造方法2.4類變量2.5應(yīng)用舉例88構(gòu)造方法構(gòu)造方法一種和類同名的特殊方法用來(lái)初始化對(duì)象Java中的每個(gè)類都有構(gòu)造方法,用來(lái)初始化該類的一個(gè)新的對(duì)象沒(méi)有定義構(gòu)造方法的類,系統(tǒng)自動(dòng)提供默認(rèn)的構(gòu)造方法3構(gòu)造方法89構(gòu)造方法的特點(diǎn)方法名與類名相同沒(méi)有返回類型,修飾符void也不能有通常被聲明為公有的(public)可以有任意多個(gè)參數(shù)主要作用是完成對(duì)象的初始化工作不能在程序中顯式的調(diào)用在生成一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新生成的對(duì)象初始化構(gòu)造方法(續(xù))3構(gòu)造方法90系統(tǒng)提供的默認(rèn)構(gòu)造方法如果在類的聲明中沒(méi)有聲明構(gòu)造方法,那么Java編譯器會(huì)提供一個(gè)默認(rèn)的構(gòu)造方法默認(rèn)的構(gòu)造方法沒(méi)有參數(shù),其方法體為空使用默認(rèn)的構(gòu)造方法初始化對(duì)象時(shí),如果在類聲明中沒(méi)有給實(shí)例變量賦初值,那么對(duì)象的屬性值為零或空3構(gòu)造方法構(gòu)造方法(續(xù))

——默認(rèn)構(gòu)造方法91聲明一個(gè)銀行帳號(hào)類及測(cè)試代碼publicclassBankAccount{ StringownerName;intaccountNumber;float

balance;}publicclassBankTester{publicstaticvoidmain(Stringargs[]){ BankAccountmyAccount=newBankAccount(); System.out.println("ownerName="+

myAccount.ownerName);System.out.println("accountNumber="+

myAccount.accountNumber); System.out.println("balance="+myAccount.balance); }}3構(gòu)造方法構(gòu)造方法(續(xù))

——例(默認(rèn)構(gòu)造方法)92運(yùn)行結(jié)果ownerName=nullaccountNumber=0balance=0.03構(gòu)造方法構(gòu)造方法(續(xù))

——例

運(yùn)行結(jié)果93自定義構(gòu)造方法與方法重載可在生成對(duì)象時(shí)給構(gòu)造方法傳送初始值,使用希望的值給對(duì)象初始化構(gòu)造方法可以被重載,構(gòu)造方法的重載和方法的重載一致一個(gè)類中有兩個(gè)及以上同名的方法,但參數(shù)表不同,這種情況就被稱為方法重載。在方法調(diào)用時(shí),Java可以通過(guò)參數(shù)列表的不同來(lái)區(qū)分應(yīng)調(diào)用哪一個(gè)方法3構(gòu)造方法構(gòu)造方法(續(xù))

——自定義構(gòu)造方法94為BankAccount聲明一個(gè)有三個(gè)參數(shù)的構(gòu)造方法publicBankAccount(StringinitName,intinitAccountNumber,floatinitBalance){ownerName=initName;accountNumber=initAccountNumber;balance=initBalance;}假設(shè)一個(gè)新帳號(hào)的初始余額可以為0,那么可增加一個(gè)帶有兩個(gè)參數(shù)的構(gòu)造方法publicBankAccount(StringinitName,intinitAccountNumber){ownerName=initName;accountNumber=initAccountNumber;balance=0.0f;}3構(gòu)造方法構(gòu)造方法(續(xù))

——例95自定義無(wú)參的構(gòu)造方法無(wú)參的構(gòu)造方法對(duì)其子類的聲明很重要。如果在一個(gè)類中不存在無(wú)參的構(gòu)造方法,那么要求其子類聲明時(shí)必須聲明構(gòu)造方法,否那么在子類對(duì)象的初始化時(shí)會(huì)出錯(cuò)3構(gòu)造方法構(gòu)造方法(續(xù))

——自定義無(wú)參構(gòu)造方法96構(gòu)建一個(gè)Bush類,有兩個(gè)有參數(shù)的構(gòu)造方法classBush{ Bush(inti){}Bush(doubled){}}如果寫:newBush();編譯器將要告訴你找不到對(duì)應(yīng)的構(gòu)造方法說(shuō)明用戶在進(jìn)行類聲明時(shí),如果沒(méi)有聲明任何構(gòu)造方法,系統(tǒng)會(huì)賦給此類一個(gè)默認(rèn)〔無(wú)參〕的構(gòu)造方法。但是,只要用戶聲明了構(gòu)造方法,即使沒(méi)有聲明無(wú)參的構(gòu)造方法,系統(tǒng)也不再賦默認(rèn)的構(gòu)造方法3構(gòu)造方法構(gòu)造方法(續(xù))

——Bush.java97在例根底上再聲明一個(gè)無(wú)參的構(gòu)造方法publicBankAccount(){ownerName="";accountNumber=999999;balance=0.0f;}3構(gòu)造方法構(gòu)造方法(續(xù))

——例98目錄2.1方法重載2.2類的訪問(wèn)控制2.3構(gòu)造方法2.4類變量2.5應(yīng)用舉例99類變量也稱為靜態(tài)變量,聲明時(shí)需加static修飾符不管類的對(duì)象有多少,類變量只存在一份,在整個(gè)類中只有一個(gè)值類初始化的同時(shí)就被賦值適用情況類中所有對(duì)象都相同的屬性經(jīng)常需要共享的數(shù)據(jù)系統(tǒng)中用到的一些常量值引用格式<類名|實(shí)例名>.<類變量名>4類變量1004類變量101對(duì)于一個(gè)圓類的所有對(duì)象,計(jì)算圓的面積時(shí),都需用到π的值,可在Circle類的聲明中增加一個(gè)類屬性PIpublicclassCircle{

staticdoublePI=3.14159265;intradius;}當(dāng)我們生成Circle類的實(shí)例時(shí),在每一個(gè)實(shí)例中并沒(méi)有存儲(chǔ)PI的值,PI的值存儲(chǔ)在類中4類變量例102對(duì)類變量進(jìn)行測(cè)試publicclassClassVariableTester{publicstaticvoidmain(Stringargs[]){Circlex=newCircle();System.out.println(x.PI);System.out.println(Circle.PI);

Circle.PI=3.14;System.out.println(x.PI);System.out.println(Circle.PI);}}測(cè)試結(jié)果3.141592653.141592653.143.14例運(yùn)行結(jié)果4類變量103聲明一個(gè)Point類,有兩個(gè)私有變量保存點(diǎn)坐標(biāo),一個(gè)類變量保存已有點(diǎn)的個(gè)數(shù)publicclassPoint{privateintx;privateinty;publicstaticintpointCount=0;publicPoint(intx,inty){this.x=x;this.y=y;pointCount++;}}4類變量

——Point.java104測(cè)試類classex2_4{ publicstaticvoidmain(String[]args){ Pointp=newPoint(1,1);System.out.println(p.pointCount); Pointq=newPoint(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount==Point.pointCount); System.out.println(Point.pointCount); }}4類變量——Point類測(cè)試105測(cè)試結(jié)果12true24類變量

——Point類測(cè)試結(jié)果106目錄2.1方法重載2.2類的訪問(wèn)控制2.3構(gòu)造方法2.4類變量2.5應(yīng)用舉例107對(duì)銀行帳戶類BankAccount進(jìn)行一系列修改和測(cè)試聲明BankAccount類聲明toString()方法聲明存取款方法使用DecimalFormat類聲明類方法生成特殊的實(shí)例聲明類變量應(yīng)用舉例5應(yīng)用舉例108包括狀態(tài)、構(gòu)造方法、get方法及set方法publicclassBankAccount{ privateStringownerName; privateintaccountNumber; privatefloatbalance; publicBankAccount(){ this("",0,0); } publicBankAccount(StringinitName,intinitAccNum,floatinitBal){ ownerName=initName; accountNumber=initAccNum; balance=initBal; } 5.1聲明BankAccount類5應(yīng)用舉例109publicStringgetOwnerName(){returnownerName;}publicintgetAccountNumber(){returnaccountNumber;}publicfloatgetBalance(){returnbalance;}publicvoidsetOwnerName(StringnewName){ownerName=newName;}publicvoidsetAccountNumber(intnewNum){accountNumber=newNum;}publicvoidsetBalance(floatnewBalance){balance=newBalance;}}5應(yīng)用舉例5.1聲明BankAccount類(續(xù))

——BankAccount.java110聲明測(cè)試類AccountTesterpublicclassAccountTester{publicstaticvoidmain(Stringargs[]){BankAccountanAccount;anAccount=newBankAccount("ZhangLi",100023,0);

anAccount.setBalance(anAccount.getBalance()+100);System.out.println("Hereistheaccount:"+anAccount);System.out.println("Accountname:"+

anAccount.getOwnerName());System.out.println("Accountnumber:"+ anAccount.getAccountNumber());System.out.println("Balance:$"+anAccount.getBalance());}}5應(yīng)用舉例5.1聲明BankAccount類(續(xù))

——AccountTester.java111測(cè)試結(jié)果Hereistheaccount:BankAccount@372a1aAccountname:ZhangLiAccountnumber:100023Balance:$100.05應(yīng)用舉例5.1聲明BankAccount類(續(xù))

——AccountTester測(cè)試結(jié)果112給BankAccount類增加存款及取款方法//存款

publicfloatdeposit(floatanAmount){balance+=anAmount;return(balance);}

//取款

publicfloatwithdraw(floatanAmount){balance-=anAmount;return(anAmount);}5.2聲明存取款方法5應(yīng)用舉例113publicclassAccountTester{publicstaticvoidmain(Stringargs[]){BankAccountanAccount;anAccount=newBankAccount("ZhangLi",100023,0);anAccount.setBalance(anAccount.getBalance()+100);System.out.println(anAccount);System.out.println();anAccount=newBankAccount("WangFang",100024,0);System.out.println(anAccount);

anAccount.deposit(225.67f);

anAccount.deposit(300.00f);System.out.println(anAccount);

anAccount.withdraw(400.17f);System.out.println(anAccount);}}5應(yīng)用舉例5.2

聲明存取款方法(續(xù))

——修改AccountTester.java114測(cè)試結(jié)果Account#100023withbalance$100.0Account#100024withbalance$0.0Account#100024withbalance$525.67Account#100024withbalance$125.499975應(yīng)用舉例5.2

聲明存取款方法(續(xù))

——測(cè)試結(jié)果115DecimalFormat類在java.text包中在toString()方法中使用DecimalFormat類的實(shí)例方法format對(duì)數(shù)據(jù)進(jìn)行格式化修改后的toString()方法如下publicStringtoString(){return("Account#"+accountNumber+"withbalance"+("$0.00").format(balance));}5應(yīng)用舉例5.3

使用DecimalFormat類116對(duì)BankAccount類重新進(jìn)行編譯,再運(yùn)行BankTester類,運(yùn)行結(jié)果如下Account#100023withbalance$100.00Account#100024withbalance$0.00Account#100024withbalance$525.67Account#100024withbalance$125.505應(yīng)用舉例5.3

使用DecimalFormat類(續(xù))

——測(cè)試結(jié)果117聲明類方法返回特殊的BankAccount實(shí)例,作用是生成特定的幾種賬號(hào)樣例example1()方法publicstaticBankAccountexample1(){BankAccountba=newBankAccount(); ba.setOwnerName("LiHong"); ba.setAccountNumber(554000); ba.deposit(1000); returnba;}

2.5應(yīng)用舉例5.4

使用類方法生成特殊的實(shí)例118example2()publicstaticBankAccountexample2(){BankAccountba=newBankAccount();ba.setOwnerName("ZhaoWei");ba.setAccountNumber(554001);ba.deposit(1000);ba.deposit(2000);returnba;}2.5應(yīng)用舉例5.4使用類方法生成特殊的實(shí)例(續(xù))

——example2()方法119emptyAccountExample()publicstaticBankAccountemptyAccountExample(){ BankAccountba=newBankAccount(); ba.setOwnerName("HeLi"); ba.setAccountNumber(554002); returnba;

}2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論