版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章類的方法成員4.1方法的設(shè)計4.2方法中的分支語句4.3方法中的循環(huán)語句和跳轉(zhuǎn)語句4.4使用Javadoc工具制作幫助文檔4.5Java程序的編寫規(guī)則第4章類的方法成員學(xué)習(xí)目標(biāo)
掌握成員方法的聲明;
學(xué)會使用重載技術(shù)設(shè)計程序;
理解Java語言中方法調(diào)用時參數(shù)的傳遞過程;
掌握Java語言中分支程序的設(shè)計;
掌握Java語言中循環(huán)程序的設(shè)計;
理解跳轉(zhuǎn)語句continue和break的功能;
了解使用Javadoc工具制作幫助文檔的方法;
理解Java程序的編寫規(guī)范。一個類由數(shù)據(jù)成員和方法成員組成。方法成員對類中的數(shù)據(jù)成員進行一些操作,它由一段程序代碼組成。類中定義的方法與C語言中的函數(shù)類似,但在Java語言中不允許有單獨的函數(shù)存在,函數(shù)只能定義在類中。所以,在面向?qū)ο蟪绦蛟O(shè)計中,一般將由一個名稱標(biāo)識、具有一定功能的程序段叫方法,而不叫函數(shù)(習(xí)慣上,有時候人們也將方法稱為函數(shù))。一個方法由完成一定功能的語句組成。本章將介紹方法的設(shè)計技術(shù)和方法的主要組成語句。基本技能4.1方?法?的?設(shè)?計一個方法在類中進行聲明(或叫定義)之后,如果實例化了該類的一個對象,那么該對象就可以執(zhí)行方法中定義的操作。下面介紹方法聲明與方法調(diào)用的有關(guān)知識。4.1.1方法的聲明與調(diào)用
1.方法的聲明在一個類中,方法的聲明格式如下:
[修飾符]返回值類型方法名(參數(shù)列表) {
方法體
}修飾符是可選項,用在方法上的修飾符被稱為方法修飾符,與第3章介紹的數(shù)據(jù)成員修飾符類似。方法修飾符主要有public、private、protected、static、final和abstract等(其中public、private和static在前面的章節(jié)中已經(jīng)介紹過,protected、final和abstract將在第5章中介紹)。它們的含義簡要說明如下:●?public:用它修飾的方法,在任何包中的任何程序中都能被訪問?!?private:用它修飾的方法,只能在定義該方法的類中被訪問?!?protected:用它修飾的方法,可以被所在包中的類或者在任何包中該類的子類訪問?!?static:用它修飾的方法稱為類方法或靜態(tài)方法,可以通過類名直接調(diào)用?!?final:可以用它定義最終方法,最終方法不能在子類中進行修改?!?abstract:可以用它定義抽象方法,抽象方法必須在具體的子類中實現(xiàn)。方法可以返回一個值,返回值的類型要在方法名前面明確指出。方法可以返回簡單類型(如返回int型)數(shù)據(jù),也可以返回類類型(如返回String型)數(shù)據(jù)。若方法不返回值,則返回值類型要寫關(guān)鍵字void,并且不能省略。因此,除了第2章介紹的構(gòu)造方法外,所有的方法都要求有返回值類型。方法名可以是任何有效的Java語言標(biāo)識符(具體命名規(guī)則可參考第3.7節(jié))。方法根據(jù)實際情況可以有參數(shù)列表,也可以無參數(shù)列表(即無參數(shù)方法)。參數(shù)的類型可以為任意類型,多個參數(shù)之間要使用“,”分隔。方法體應(yīng)該由Java語言中的有效語句組成。如果方法首部的返回值類型不是void,則在方法體中就要有關(guān)鍵字return。return語句的格式很簡單,在其后直接跟返回值的表達式即可。其格式如下:
return表達式;要注意,表達式一定要保證方法能返回相應(yīng)數(shù)據(jù)類型的值。但對于有些程序,即使有正確的return語句,也不能保證程序的正確。例如:01publicclassTestReturn{02 publicstaticvoidmain(String[]args){03 System.out.println(test(3));04 }05 staticinttest(inta){06 if(a>0)07 returna;08 /*else09 return-a;*/10 }11}該程序編譯時,將發(fā)生“缺少return語句”的錯誤,因為方法test不能保證在任何情況下都有返回值(如果去掉注釋,則可以編譯成功)。另外,當(dāng)把return語句放在一個循環(huán)語句的循環(huán)體中時,也可能出現(xiàn)編譯錯誤(案例4-2中將演示該錯誤),因為編譯時會認為這個循環(huán)體有可能不被執(zhí)行(除非寫成do循環(huán)或者無限循環(huán)的形式)。注意:返回值類型為void的方法也可以使用return語句,這時return語句的功能是終止方法的執(zhí)行并返回到該方法的調(diào)用者。這時,return語句后不能出現(xiàn)表達式(即為空的return語句)。
2.方法的調(diào)用根據(jù)方法是否有返回值,可分為兩種調(diào)用格式:
(1)方法有返回值時的調(diào)用。如果方法返回一個值,則通常以表達式的方式調(diào)用。例如,java.lang包中的數(shù)學(xué)函數(shù)類Math中,定義了求兩個數(shù)中最大值的max方法,則通常按類似于下列的格式調(diào)用:intlarger=Math.max(3,4)*3;System.out.println(Math.max(3,4));
(2)方法無返回值時的調(diào)用。如果方法返回類型為void,即無返回值,則這時對方法以語句的形式調(diào)用。如System類中終止程序執(zhí)行的方法exit,只能按類似于下列的格式調(diào)用:
System.exit(1);4.1.2【案例4-1】累加器
1.案例描述編寫一個類,以完成累加器的功能。要求可以對存放在整型數(shù)組或?qū)嵭蛿?shù)組中的一批數(shù)進行累加運算。
2.案例效果案例程序的執(zhí)行效果如圖4-1所示。圖中第3行為整型數(shù)組中元素的值及其累加和,第4行為實型數(shù)組中元素的值及其累加和。圖4-1案例4-1的執(zhí)行效果
3.技術(shù)分析該程序比較簡單,技術(shù)分析略。
4.程序解析下面是案例4-1的程序代碼。01//*******************************************02//案例:4-1程序名:TestAdder.java03//功能:累加器程序,可以求整型數(shù)組或?qū)嵭蛿?shù)組元素的累加和04//*****************************************0506classAdder{07 08 privateAdder(){}09 10 publicstaticfloatsum(float[]f){11 floattemp=0.0f;12 for(inti=0;i<f.length;i++){13 temp=temp+f[i];14 }15 returntemp;16 }1718 publicstaticintsum(int[]k){19 inttemp=0;20 for(inti=0;i<k.length;i++){21 temp=temp+k[i];22 }23 returntemp;24 }25}2627classTestAdder{28 publicstaticvoidmain(String[]args){29 //Addera=newAdder();30 31 //下面是測試整型數(shù)組求和的程序段32 int[]x={2,34,12,45,23,41,1};33 for(inti=0;i<x.length;i++){34 if(i==x.length-1)35 System.out.print(x[x.length-1]+"=");36 else37 System.out.print(x[i]+"+");38 }39 System.out.println(Adder.sum(x));40 41 //下面是測試實型數(shù)組求和的程序段42 float[]y={2.34f,23.34f,12.45f,234.45f,10f};43 for(inti=0;i<y.length;i++){if(i==y.length-1)45 System.out.print(y[y.length-1]+"=");46 else47 System.out.print(y[i]+"+");48 }49 System.out.println(Adder.sum(y));50 }51}該程序中,08行定義了一個無參的構(gòu)造方法“privateAdder(){}”,該構(gòu)造方法的修飾符為private,說明在Adder類的外面不能使用構(gòu)造方法創(chuàng)建一個該對象的實例。那么,Adder類如何在程序中使用呢?在Adder類中,定義的求和的方法為靜態(tài)的(static)和公有的(public),所以在其他類中可以直接使用Adder類中求和的成員方法。注意,在Adder類中定義的兩個方法名稱都為sum,只是參數(shù)類型和返回值類型不同,這就是在第2章中介紹過的方法重載。一般成員方法的重載與構(gòu)造方法的重載類似,都是指兩個方法具有相同的名稱和不同的形式參數(shù)。方法名與形式參數(shù)一般合稱為方法頭標(biāo)志。調(diào)用方法時,Java系統(tǒng)能夠根據(jù)方法頭標(biāo)志決定調(diào)用哪個方法。在JavaAPI中有很多方法是重載的,如第3章介紹過的Arrays類,其sort方法就有十幾個重載的版本。方法重載的優(yōu)點是執(zhí)行相似任務(wù)的方法可以使用相同的名稱,可使程序清晰、易讀。注意:被重載的方法必須具有不同的參數(shù)形式。也就是說重載的方法,其方法名必須相同,參數(shù)必須不同(指參數(shù)的類型、個數(shù)或順序不同),不能通過返回值類型和方法的修飾符來區(qū)別重載的方法。如下面的三個方法不能進行重載(因為這三個方法的參數(shù)都是int型):
publicvoidm1(inta){…}
publicintm1(intb){…}
intm1(intc){…}下面的兩個方法可以進行重載:
publicvoidm1(inta,floatb){…}
publicvoidm1(floatb,inta){…}4.1.3【相關(guān)知識】參數(shù)傳遞在方法定義中列出的參數(shù)叫形式參數(shù),簡稱為形參;在方法調(diào)用時給出的參數(shù)叫實在參數(shù),簡稱為實參。Java語言中,調(diào)用一個方法時將實參值拷貝給對應(yīng)的形參。下面舉例說明參數(shù)的傳遞情況。
1.參數(shù)為簡單類型時的傳遞情況下面的程序中,其方法中的參數(shù)是簡單類型的。請分析下面程序執(zhí)行的結(jié)果。
01classTestParam{
02 staticvoidchange(inta){
03 a=12;
04 }05 06 publicstaticvoidmain(String[]args){07 inta=1;08 change(a);09 System.out.println("a="+a);10 }11}程序運行后,輸出的a是多少?分析該程序時要注意,從表面上看好像a的結(jié)果應(yīng)該為12。但其實該程序的執(zhí)行過程是這樣的,在main方法中定義了一個局部變量a,a的初值為1,這個a只在main方法內(nèi)有效,如圖4-2(a)所示。08行調(diào)用change方法時,系統(tǒng)給02行方法change的形參a分配一個內(nèi)存空間,并將主方法中a的值1拷貝給change方法的參數(shù)a,如圖4-2(b)所示,這個形參a只是一個在change方法內(nèi)有效的局部變量,拷貝過程完成后,參數(shù)的傳遞過程也隨之結(jié)束,main方法中的局部變量a和change方法中的局部變量a就沒有關(guān)系了。所以,在03行改變的只是change方法中的局部變量a的值(將其改為12),如圖4-2(c)所示,對main方法中的變量a沒有影響。當(dāng)change方法執(zhí)行完成后,程序返回到main方法時,change方法中的局部變量a的生命周期結(jié)束,即分配的內(nèi)存被系統(tǒng)回收,如圖4-2(d)所示,所以09行輸出的還是1。圖4-2參數(shù)為簡單類型時的傳遞過程
2.參數(shù)為對象類型時的傳遞情況下面程序中,其方法中的參數(shù)是數(shù)組對象。請分析下面的程序,看與上面的實例程序有什么不同。
01importjava.util.*;
02classTestParam1{
03 staticvoidchange(int[]b){
04 Arrays.fill(b,10);
05 }
06 07 publicstaticvoidmain(String[]args){08 int[]a={1,2,3,4,5,6};09 change(a);10 for(inti=0;i<a.length;i++)11 System.out.println(a[i]);12 }13}程序運行后,輸出的數(shù)組元素值是什么?該程序的執(zhí)行過程分析如下:在main方法中定義了一個局部數(shù)組a,并給a數(shù)組的元素提供了1~6的初值,如圖4-3(a)所示(假設(shè)分配給數(shù)組對象a的內(nèi)存地址從0x1000開始)。數(shù)組a由于在main方法中定義,因此其有效范圍為main方法。09行調(diào)用方法change時,將主方法main中的數(shù)組對象a作為參數(shù),傳遞給change方法的形參對象b(b也是一個整型數(shù)組),系統(tǒng)就會將數(shù)組對象變量a中存放的0x1000(即引用)拷貝給方法change的參數(shù)b,如圖4-3(b)所示。這時main方法中定義的局部數(shù)組a和change方法中定義的局部數(shù)組b指向了相同的內(nèi)存區(qū),即它們的引用相同。
04行調(diào)用Arrays的fill方法時,對change方法中形參數(shù)組b的所有元素填充為10,則相應(yīng)內(nèi)存中main方法中的局部數(shù)組a和change方法中的局部數(shù)組b指向的數(shù)據(jù)元素都被改為10,如圖4-3(c)所示。當(dāng)方法change執(zhí)行完成后,程序返回到main方法時,change方法中局部數(shù)組b的生命周期結(jié)束,即從內(nèi)存消失(分配給數(shù)組對象變量b的存放引用的內(nèi)存單元被回收),如圖4-3(d)所示。所以,最后main方法中局部數(shù)組a的所有元素被改變。圖4-3參數(shù)為對象(數(shù)組)時的傳遞過程4.2方法中的分支語句在一個方法中,流程控制語句用來控制程序中各語句的執(zhí)行順序。Java語言提供的控制語句分為分支語句和循環(huán)語句?!穹种дZ句■簡單if語句和if-else語句;■嵌套的if語句;■?switch語句?!裱h(huán)語句■?while循環(huán)、do循環(huán)和for循環(huán);■嵌套的循環(huán)語句;■?break和continue關(guān)鍵字。4.2.1分支流程控制
Java中的分支語句有兩種:雙分支if語句和多分支switch語句。if語句應(yīng)用在“二選一”的情況下,而switch語句應(yīng)用在“多選一”的情況下。
1.簡單if語句簡單if語句只在條件為真時執(zhí)行語句。其語法如下:
if(布爾表達式)語句其格式中的語句可以是一組語句。例如:
if((i>=0)&&(i<=10)){
f=i;
System.out.println("iisanintegerbetween0and10");
}注意:與C語言不同,if后面必須是布爾型的表達式,而不能是數(shù)值型的,因為Java語言中的布爾型是獨立的數(shù)據(jù)類型。
2.?if-else語句
if-else語句在當(dāng)指定的布爾表達式為true時,執(zhí)行一組語句(也可是一條語句);為false時,執(zhí)行另一組語句。其語法如下:
if(布爾表達式){布爾表達式為真時執(zhí)行的語句;
}
else{布爾表達式為假時執(zhí)行的語句;
}例如:
if(radius>=0){
area=radius*radius*PI;
System.out.println("圓的面積是:"+area);
}
else{
System.out.println("半徑不能為負數(shù)");
}注意:當(dāng)花括號中只有一條語句時,花括號可以省略。但為了程序邏輯結(jié)構(gòu)的清晰,盡量不要省略花括號。
3.嵌套的if語句
if或if-else中要執(zhí)行的語句可以是任意合法的Java語句,當(dāng)然也包括其他if或if-else語句。如果一條if語句中還包含其他的if語句(或if-else語句),或一條if-else語句中還包含其他的if語句(或if-else語句),則構(gòu)成if語句的嵌套。例如:
if(i>k){
if(j>k)
System.out.println("k是i和j三個數(shù)比較小的一個");
}
else System.out.println("i等于或者小于k");注意:該例中如果將花括號去掉,則會造成理解上的二義性,既可以認為else與外層的if匹配,也可以認為else與內(nèi)層的if匹配。沒有花括號時,一般在程序設(shè)計語言中規(guī)定,else語句將與最近的if語句相匹配。請讀者思考,如果將上例程序中的{}去掉,結(jié)果正確嗎?如當(dāng)i=3、j=1、k=2時,最后輸出else分支內(nèi)語句,這是錯誤的結(jié)果。當(dāng)有多重if語句嵌套在else語句中時,常使用如下的書寫風(fēng)格:
if(布爾表達式1)語句1
elseif(布爾表達式2)語句2
elseif(布爾表達式3)語句3 elseif(布爾表達式n)語句n
else語句n+1;這個風(fēng)格可以避免深層縮進,使程序容易閱讀。
4.多路分支語句switch
switch語句的一般形式如下:
switch(表達式){
case常量1:語句塊1;//分支1
case常量2:語句塊2;//分支2
…
case常量n:語句塊n;//分支n
default:語句塊n+1;//分支n+1
}在使用switch語句時要注意以下問題:●?switch后表達式的值必須是byte、char、short或int類型的,不能使用浮點類型或long類型,也不能為一個字符串,并且必須寫在一對括號內(nèi)?!?case子句中常量的類型必須與表達式的類型相容,而且每個case子句中常量的值必須是不同的?!?default子句是可選的,當(dāng)表達式的值與任一個case子句中的值都不匹配時,就執(zhí)行default后的語句?!袢绻麤]有使用break語句作為某一個case代碼段的結(jié)束句,則程序的執(zhí)行將繼續(xù)到下一個case,而不檢查case表達式的值。4.2.2【案例4-2】計算償還金
1.案例描述設(shè)計程序,根據(jù)年貸款利率、貸款年限和貸款額,計算償還金額。本題中,假設(shè)只有三種貸款方式,即3年期、5年期和10年期,其利率分別是:3年期為7%,5年期為8%,10年期為10%。
2.案例效果案例的執(zhí)行結(jié)果如圖4-4所示。圖4-4案例4-2的執(zhí)行結(jié)果
3.技術(shù)分析該程序要使用if語句,根據(jù)不同的貸款年限來計算利息。
4.程序解析案例程序如下:01//**********************************************02//案例:4-2程序名:TestCash.java03//功能:計算償還金04//**********************************************0506classCash{07 //lendAmount為貸款數(shù)量08 privatefloatlendAmount;09 //lendYear為貸款年限10 privateintlendYear;11 //下面3個常量為年利率13 privatefinalfloatTHREE_YEAR_INTEREST_RATE=0.07F;14 privatefinalfloatFIVE_YEAR_INTEREST_RATE=0.08F;15 privatefinalfloatTEN_YEAR_INTEREST_RATE=0.10F;16 17 //有參數(shù)的構(gòu)造方法18 publicCash(floatlendAmount,intlendYear){19 this.lendAmount=lendAmount;20 this.lendYear=lendYear;21 }22 23 //計算償還金24 privatefloatcompensateAmount(){25 if(lendYear==3)26 returnlendAmount*lendYear*THREE_YEAR_INTEREST_RATE+lendAmount;27 elseif(lendYear==5)28 returnlendAmount*lendYear*FIVE_YEAR_INTEREST_RATE+lendAmount;29 elseif(lendYear==10)30 returnlendAmount*lendYear*FIVE_YEAR_INTEREST_RATE+lendAmount; 31 else{32 System.out.println("貸款年限只能是3年、5年或10年!");33 System.exit(-1);34 return0.0f;35 }36 }37 38 //顯示貸款信息和償還金39 publicvoidshowCompensateAmount(){40 System.out.println("共貸款"+lendAmount+"元,"+lendYear+"年后的償還金為"+compensateAmount()+"元");41 }42}4344classTestCash{45 publicstaticvoidmain(Stringargs[]){46 Cashc1=newCash(2000.0f,3);47 c1.showCompensateAmount();48 49 Cashc2=newCash(10000.0f,5);50 c2.showCompensateAmount();51 52 Cashc3=newCash(10000.0f,10);53 c3.showCompensateAmount();54 }55}該程序的13行、14行和15行定義了3個存放年利率的常量。注意,常量標(biāo)識符一般用大寫字母表示。注意,第34行在程序中其實是多余的,但將其去掉,程序?qū)⒉荒苷_編譯。4.2.3【相關(guān)知識】在方法中使用常量在第3章介紹過,在類中final修飾的數(shù)據(jù)成員是常量成員,其值不能在程序中進行修改。在方法中,也可以用final說明局部常量,但與類中final說明的常量成員有一點不同??聪旅娴膶嵗?1classTestFinal{02 staticfinalintb=5;03 publicstaticvoidmain(String[]args){04 finalinta;05 a=45;06 //Temp.b=34;07 //a=50;08 }09}第02行如給成員常量b不賦初值,則程序編譯有錯誤,但第04行在方法中說明的局部常量a,可以在以后賦值,但只能賦一次值。所以,程序的第06行和第07行均有錯誤。4.3方法中的循環(huán)語句和跳轉(zhuǎn)語句
Java語言與C語言類似,也有3種循環(huán)語句,即for、do-while和while循環(huán)。Java程序中的跳轉(zhuǎn)語句經(jīng)常使用在循環(huán)中。4.3.1循環(huán)語句和跳轉(zhuǎn)語句循環(huán)結(jié)構(gòu)的程序是在一定條件下,反復(fù)執(zhí)行某段程序的流程結(jié)構(gòu),被反復(fù)執(zhí)行的程序稱為循環(huán)體。
1.?while語句
while語句的語法格式如下:
while(布爾表達式){循環(huán)體
}
while語句的循環(huán)條件是一個布爾表達式,它必須放在括號中。在循環(huán)體執(zhí)行前,先計算布爾表達式,若結(jié)果為true,則執(zhí)行循環(huán)體;若結(jié)果為false,則終止循環(huán)體的執(zhí)行,程序轉(zhuǎn)移到while循環(huán)后的語句執(zhí)行。
2.?do-while語句
do-while語句的語法格式如下:
do{循環(huán)體
}while(布爾表達式)
do-while循環(huán)先執(zhí)行循環(huán)體,再計算循環(huán)條件,若計算結(jié)果為true,則執(zhí)行循環(huán)體;若為false,則終止do循環(huán)的執(zhí)行。
while循環(huán)和do-while循環(huán)的比較:
(1)?while循環(huán)先計算布爾表達式的值,再根據(jù)計算結(jié)果確定是否執(zhí)行循環(huán)體,因此循環(huán)體有可能一次也不執(zhí)行。
(2)?do循環(huán)先執(zhí)行循環(huán)體,然后再計算布爾表達式的值,因此循環(huán)體要至少被執(zhí)行一次。因此,若循環(huán)體中的語句至少需要執(zhí)行一次,建議使用do循環(huán),否則可以使用while語句。
3.?for語句
for語句的語法格式如下:
for(循環(huán)變量初始化;循環(huán)條件;循環(huán)變量調(diào)整語句){循環(huán)體
}
for循環(huán)語句以關(guān)鍵字for開始,for后面的括號中是3個由分號分開的控制元素,它們都以表達式的方式出現(xiàn)。循環(huán)條件用于控制循環(huán)體的執(zhí)行次數(shù),其結(jié)果應(yīng)該為一個布爾值。循環(huán)體在花括號中,當(dāng)然只有一條循環(huán)體語句時,可以不要花括號。為了使程序結(jié)構(gòu)清晰,建議在任何情況下都寫上花括號。注意:for循環(huán)一般使用在循環(huán)次數(shù)事先確定的情況下,而while和do-while循環(huán)一般用在循環(huán)次數(shù)事先不確定的情況下。在for循環(huán)、while循環(huán)和do-while循環(huán)的循環(huán)體中,都可以出現(xiàn)其他的循環(huán)語句,也就是說它們都可以嵌套。嵌套循環(huán)由一個外層循環(huán)和一個或多個內(nèi)層循環(huán)組成。每當(dāng)外層循環(huán)重復(fù)時,就重新進入內(nèi)部循環(huán),重新計算它的循環(huán)控制參數(shù)。
4.跳轉(zhuǎn)語句跳轉(zhuǎn)語句用來實現(xiàn)程序執(zhí)行過程中流程的轉(zhuǎn)移。Java的跳轉(zhuǎn)語句有三個:continue、break和return。其中return語句用于從被調(diào)用的方法中返回到調(diào)用方法中。下面主要介紹break和continue語句。
1)?continue語句
continue語句用于循環(huán)結(jié)構(gòu)中,表示終止當(dāng)前這輪循環(huán)體的執(zhí)行,直接進入下一輪循環(huán)。continue語句通常有兩種使用情況:
(1)不帶標(biāo)號的continue語句:用來結(jié)束本次循環(huán),即跳過循環(huán)體中continue語句后面的語句,回到循環(huán)體的條件測試部分繼續(xù)執(zhí)行。例如:01//測試不帶標(biāo)號的continue語句02publicclassTestCont1{03 publicstaticvoidmain(String[]args){04 intindex=0;05 while(index<=99){06 index+=10;07 if(index%20==0)08 continue;09 System.out.println("Theindexis"+index);10 }11 }12}第07行表示當(dāng)index的值能被20整除時,循環(huán)回到05行的while語句處,進行下輪循環(huán)的條件測試,而不像正常處理那樣去執(zhí)行后面的09行輸出語句。程序的運行結(jié)果如圖4-5所示。圖4-5TestCout1.java程序的執(zhí)行結(jié)果
(2)帶標(biāo)號的continue語句:用來跳過標(biāo)號所指語句塊中所剩的語句,回到標(biāo)號所指語句塊的條件測試部分繼續(xù)執(zhí)行(具體應(yīng)用見本節(jié)案例程序)。
Java語言中,標(biāo)號常用于標(biāo)識一個語句塊或一個循環(huán),標(biāo)號用有效的標(biāo)識符表示。一般將標(biāo)號放在語句塊的開頭或某一循環(huán)的開頭。
2)?break語句
break語句用于從一個語句塊中跳轉(zhuǎn)出來,進入該語句塊后面的語句繼續(xù)執(zhí)行程序。break語句通常在switch語句和循環(huán)語句中使用。break語句也有兩種用法:
(1)無標(biāo)號的break語句:用于跳出switch語句或當(dāng)前循環(huán),但與continue語句不同的是,continue語句將使循環(huán)進入下一次,而break語句將結(jié)束循環(huán)的執(zhí)行。
(2)帶標(biāo)號的break語句:用于結(jié)束標(biāo)號標(biāo)注語句塊的執(zhí)行。break語句的標(biāo)號應(yīng)標(biāo)注在一個語句塊的開頭。請分析下面程序的執(zhí)行過程:1L1:{2 a=45;3 L2:{ System.out.println("a="+2);4 if(a==45) breakL1;5 System.out.println("a="+12);6 }7 System.out.println("a="+3);8}9…如果第4行的break語句后面不帶標(biāo)號L1,則第4行的跳轉(zhuǎn)語句只跳出L2語句塊,因此第7行的輸出語句還要被執(zhí)行。但break帶了標(biāo)號L1后,如果第4行的條件成立,則第7行的語句不被執(zhí)行,即程序跳出L1標(biāo)號所指的語句塊,即從第9行開始繼續(xù)執(zhí)行程序。4.3.2【案例4-3】求素數(shù)
1.案例描述給定一個大于1的正整數(shù),求從1到該數(shù)之間的所有素數(shù)。
2.案例效果案例程序的執(zhí)行效果如圖4-6所示。圖4-6案例4-3的執(zhí)行結(jié)果
3.技術(shù)分析可以根據(jù)素數(shù)的定義判斷一個數(shù)是不是素數(shù)。如要判斷7是不是素數(shù),可以用7分別除以2到6之間的所有整數(shù),如果都不能整除,則說明7就是素數(shù)。求素數(shù)的算法描述如下:for(i從1循環(huán)到正整數(shù)n){for(j從2循環(huán)到i-1){
判斷i能否被j整除;如果能整除就轉(zhuǎn)到外循環(huán),取下一個i執(zhí)行程序
}
輸出i(如果i不能被2到i-1之間的數(shù)據(jù)所整除,則說明i是素數(shù));}
4.程序解析下面是案例4-3的程序代碼。01//************************************************02//案例:4.3程序名:TestPrime.java03//功能:求1到給定整數(shù)之間的所有素數(shù)04//************************************************0506classPrime{07 privateintn;08 09 Prime(intn){10 this.n=n;11 }12 13 publicvoidoutputPrime(){14 System.out.println("1到"+n+"之間的所有素數(shù)如下:");15 intlineControl=0;16 outer:for(inti=1;i<n;i++) {17 for(intj=2;j<i;j++){18 if(i%j==0)continueouter;19 }20 System.out.print(i+"\t");21 }22 }23}2425classTestPrime{26 publicstaticvoidmain(Stringargs[]){27 Primep1=newPrime(Integer.parseInt(args[0]));28 p1.outputPrime();29 }30}該程序的第16行定義了一個語句標(biāo)號outer,第18行的功用是:當(dāng)i能被j整除時,就跳出內(nèi)循環(huán),轉(zhuǎn)到由標(biāo)號outer標(biāo)識的外循環(huán),即執(zhí)行第16行所指的外循環(huán)語句。第20行的功用是:當(dāng)i不能被2到i-1之間的所有數(shù)整除時,輸出素數(shù)i。讀者可以對案例4-3所示的程序進行優(yōu)化,以提高程序執(zhí)行的速度。4.3.3【相關(guān)知識】foreach循環(huán)在JDK6.5中新增了一個循環(huán)語句foreach,它可以用來簡化某些循環(huán)語句的書寫。如有下面的數(shù)組定義:float[]a={23.23f,34.9f,45.88f,45.556f,23.987f,23.0f,34.45f};要輸出所有數(shù)組元素值,可以使用下面的循環(huán)語句:for(inti=0;i<a.length;i++){System.out.println(a[i]);}對上面的程序段,在Java語言中還可以用下面的簡單方式寫出:for(floatk:a){ System.out.println(k);}這里的k會按序自動取得數(shù)組a中的每個下標(biāo)元素。Java語言中將這種格式的for語句叫做foreach循環(huán),但要注意,只能在JDK5.0以上的版本中使用。技能拓展4.4使用Javadoc工具制作幫助文檔
Javadoc是一個用于從Java源代碼的注釋中自動提取有關(guān)信息以生成HTML幫助文檔的工具。用Javadoc生成的幫助文檔與JDK幫助文檔的格式類似。Javadoc作為Java軟件開發(fā)包(SDK)的一個標(biāo)準(zhǔn)部分,與編譯器Javac.exe和解釋器Java.exe工具一樣,位于安裝目錄下的bin文件夾中。Javadoc.exe可執(zhí)行文件為開發(fā)人員快速制作程序的幫助文檔提供了一種非常有效的手段。下面舉例說明Javadoc制作幫助文檔的方法。4.4.1文檔注釋中使用的標(biāo)記
1.文檔注釋在第1章介紹過,Java的注釋有3種方式,其中文檔注釋專門用于生成HTML格式的幫助文檔。文檔注釋用“/**……*/”表示,即注釋內(nèi)容要寫入“/**”和“*/”之間。文檔注釋的內(nèi)容應(yīng)該放在類、屬性、構(gòu)造方法、成員方法的前面,以解釋和說明這些程序結(jié)構(gòu)。文檔注釋“/**……*/”可以跨行使用,但要求每一行要以“*”號開始。在注釋的內(nèi)容中,還允許使用HTML語言中的標(biāo)記。例如,下面的注釋中使用了HTML的標(biāo)記<strong>:/***Thisisa<strong>example</strong>documentcomment.*/由于文檔注釋中內(nèi)容的第一句話會被Javadoc工具自動放在所生成HTML文件的開頭,并將其作為對注釋內(nèi)容的一個總結(jié),因此,該總結(jié)以*字符后的內(nèi)容為起點,并結(jié)束于第一個句號之前。
2.文檔注釋中使用的標(biāo)記要使Javadoc工具正確理解用戶注釋的含義,可以在文檔注釋中使用一些Javadoc規(guī)定的標(biāo)記。這些標(biāo)記位于文檔注釋內(nèi),要求每個標(biāo)記要另起一行,以一個“*”字符開始。表4-1是Javadoc工具常用的幾個標(biāo)記。表4-1幾個常用的Javadoc標(biāo)記4.4.2Javadoc應(yīng)用實例下面是一個使用Javadoc文檔生成器的實例:01/**02*Thisisa<strong>example</strong>documentcomment.03*@authorRentaiming04*@versionv1.005*/0607publicclassExampleDocComment{0809 /**10 *xx是一個公有成員屬性11 */12 publicintxx=0;13 1415 /**16 *ExampleDocComment是一個無參數(shù)的構(gòu)造方法17 */18 publicExampleDocComment(){19 }20 21 /**22 *setXx方法用來給屬性xx提供數(shù)值23 *@paramxx 參數(shù)xx是一個整型數(shù)值24 */25 publicvoidsetXx(intxx){26 this.xx=xx;27 }28 29 /**30 *getXx方法取得公有成員xx的數(shù)據(jù)31 *@returnxx返回整型數(shù)據(jù)32 */33 publicintgetXx(){34 returnxx;35 } 36}使用下列Javadoc命令生成幫助文檔:javadoc-version-authorExampleDocComment.java執(zhí)行該命令后,在源程序文件所在目錄中生成十幾個HTML格式的幫助文檔,點擊其中的index.html文件,則顯示類似于圖4-7所示的幫助文檔窗口。該窗口與JDK幫助系統(tǒng)的風(fēng)格是一致的,使用起來很方便。圖4-7Javadoc工具生成的幫助文檔窗口注意,該程序所有的幫助都使用了文檔注釋的格式(/***/)。第02行的<strong>example</strong>將使example加粗顯示;第03行的@authorRentaiming將在幫助文檔中加上作者信息;第04行的@version將幫助文檔中加上版本信息,如圖4-7所示。每個成員變量前和每個方法前的文檔注釋將會被Javadoc工具自動生成的幫助所使用。程序的第23行還使用了參數(shù)標(biāo)記@param,在第31行使用了返回值標(biāo)記@return,這樣生成的幫助文檔將對參數(shù)和返回值進行說明,如圖4-8所示。圖4-8幫助文檔中方法的詳細說明
Javadoc也可使用下面的簡單格式:
javadocExampleDocComment.java這時生成的幫助將忽略作者和版本信息。另外,Javadoc還提供了很多有用的標(biāo)記,具體情況可查看Javadoc的幫助。工程規(guī)范4.5Java程序的編寫規(guī)則一個軟件開發(fā)團隊中,每個人一般只負責(zé)所開發(fā)系統(tǒng)中的某個部分,在軟件編碼的最后階段,要將這些部分集成起來,構(gòu)建成一個最終的軟件產(chǎn)品。因此,為了便于軟件開發(fā)成員之間互相協(xié)作、交流和軟件的集成,一個軟件開發(fā)團隊一般都會制定一些編碼標(biāo)準(zhǔn)或軟件開發(fā)規(guī)則,這些規(guī)則一般依據(jù)國家標(biāo)準(zhǔn)、行業(yè)標(biāo)準(zhǔn)或軟件開發(fā)工具的特點等制定。本節(jié)介紹一些使用Java語言開發(fā)軟件時常用的軟件編寫規(guī)則。4.5.1類的設(shè)計規(guī)則下面是幾點基本的類設(shè)計規(guī)則:●使用統(tǒng)一、一致的編碼風(fēng)格?!衩總€類的前面要有對該類的注釋;●在包含main的類中,不要再設(shè)計其他的方法,即將main方法放在一個單獨的類中;●要使用同一個包中的多個類時,盡量在import語句中使用“*”來代替多個類名;●一般不要使用public修飾成員變量;●程序中其值不變的量,盡量使用final修飾符來聲明;●對于類中定義的成員變量,用構(gòu)造方法進行初始化;●類中的成員屬性,使用setXXX和getXXX設(shè)置或獲取其值;●一個類的不同方法之間、不同性質(zhì)的屬性之間、屬性與方法之間一般要空一行或兩行;●一個方法或?qū)傩缘淖⑨尫旁诰o接其代碼的前面;●盡可能細致地加上注釋,并用Javadoc注釋文檔語法生成自己的程序文檔;●使類盡可能短小精悍,而且只解決一個特定的問題;●一個類要提供盡可能少的公用方法;●源程序中,每行的字符要保持在80個以內(nèi)。4.5.2方法的設(shè)計規(guī)則方法的主要設(shè)計規(guī)則是:●方法中盡量不要使用continue語句;●?break語句一般只使用在switch語句中;●每個方法體應(yīng)該都有return語句,返回值為void的方法,return語句后不能有返回值,并且要將return語句放在方法的最后一行;●盡量不要使用if語句的多層嵌套,例如;if(a>0)if(b>0)x=a*b;…可將if語句寫為“if((a>0)&&(b>0)”格式?!駥ν馓峁┓?wù)的方法用public修飾,支持類中功能的方法用private修飾。另外,關(guān)于標(biāo)識符的命令規(guī)則和程序的書寫規(guī)則已經(jīng)在前面的“工程規(guī)范”中介紹過。讀者在編寫程序時應(yīng)盡量養(yǎng)成好的設(shè)計習(xí)慣,即遵守一般的編程規(guī)則?;A(chǔ)練習(xí)【簡答題】
4.1什么是方法?如何聲明方法?
4.2方法的調(diào)用有哪兩種格式?
4.3什么是方法重載?舉例說明。
4.4final修飾符用在成員變量前和用在一個方法的局部變量前有沒有區(qū)別?
4.5舉例說明當(dāng)參數(shù)是對象類型時的傳遞過程。
4.6分支語句有哪幾種類型?它們的格式如何?
4.7對于兩個實數(shù)要進行的“==”比較,將如何處理?
4.8舉例說明有些程序使用switch語句可以簡化程序的編寫。
4.9說明for、while和do-while循環(huán)的格式,并對其進行比較。
4.10舉例說明foreach循環(huán)的使用方法。
4.11說明使用Javadoc制作幫助文檔的優(yōu)點。
4.12根據(jù)你的理解,說明你編寫Java程序時要遵守的規(guī)則?!具x擇題】
4.13下列方法定義中,正確的是()。
A)intx(inta,b){return(a-b);}
B)doublex(inta,intb){intw;w=a-b;}
C)doublex(a,b){returnb;}
D)intx(inta,intb){returna-b;}
4.14下列方法定義中,正確的是()。
A)voidx(inta,intb);{return(a–b);}
B)x(inta,intb){returna-b;}
C)doublex{returnb;}
D)intx(inta,intb){returna+b;}
4.15下列方法定義中,不正確的是()。
A)floatx(inta,intb){return(a-b);}
B)intx(inta,intb){returna-b;}
C)intx(inta,intb);{returna*b;}
D)intx(inta,intb){return1.2*(a+b);}
4.16下列方法定義中,正確的是()。
A)intx(){charc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年電子商務(wù)行業(yè)股權(quán)配置合同3篇
- 2024年贊助合同6篇
- 2024年環(huán)??萍脊竟I(yè)廢氣處理設(shè)備采購合同
- 2024年甲方乙雙方關(guān)于新能源發(fā)電項目投資與建設(shè)合同
- 2024年裝修工程承包協(xié)議標(biāo)準(zhǔn)格式版B版
- 2024年版:基于區(qū)塊鏈技術(shù)的智能合約開發(fā)與應(yīng)用服務(wù)協(xié)議
- 2024年版設(shè)備安裝整體解決方案服務(wù)協(xié)議版B版
- 2024年網(wǎng)絡(luò)營銷推廣合同(跨境電商)
- 2024年物業(yè)改造工程內(nèi)部承包協(xié)議
- 2024年度土地租賃與新能源項目合作框架協(xié)議3篇
- 湖南省部分學(xué)校2023-2024學(xué)年高二上學(xué)期期末聯(lián)合考試政治試卷 含解析
- 電大《人力資源管理》期末復(fù)習(xí)綜合練習(xí)題答案(2024年)
- 西師版數(shù)學(xué)(四上題)2023-2024學(xué)年度小學(xué)學(xué)業(yè)質(zhì)量監(jiān)測(試卷)
- 2022-2023學(xué)年廣東省廣州市白云區(qū)華南師大附屬太和實驗學(xué)校九年級(上)期末數(shù)學(xué)試卷(含答案)
- 2024年煤礦安全生產(chǎn)知識競賽題庫及答案(共100題)
- 東方電影學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 人教版四年級上冊數(shù)學(xué)數(shù)學(xué)復(fù)習(xí)資料
- SB/T 10439-2007醬腌菜
- 3.2熔化和凝固-人教版八年級上冊課件(21張PPT)pptx
- 2017衢州新城吾悅廣場開業(yè)安保方案
- 公司宣傳品管理辦法1
評論
0/150
提交評論