![程式設(shè)計(jì)參考書(shū)目1.ppt_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/30/65271779-f943-43e4-a2ef-1c8068da75b7/65271779-f943-43e4-a2ef-1c8068da75b71.gif)
![程式設(shè)計(jì)參考書(shū)目1.ppt_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/30/65271779-f943-43e4-a2ef-1c8068da75b7/65271779-f943-43e4-a2ef-1c8068da75b72.gif)
![程式設(shè)計(jì)參考書(shū)目1.ppt_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/30/65271779-f943-43e4-a2ef-1c8068da75b7/65271779-f943-43e4-a2ef-1c8068da75b73.gif)
![程式設(shè)計(jì)參考書(shū)目1.ppt_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/30/65271779-f943-43e4-a2ef-1c8068da75b7/65271779-f943-43e4-a2ef-1c8068da75b74.gif)
![程式設(shè)計(jì)參考書(shū)目1.ppt_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/30/65271779-f943-43e4-a2ef-1c8068da75b7/65271779-f943-43e4-a2ef-1c8068da75b75.gif)
免費(fèi)預(yù)覽已結(jié)束,剩余68頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
物件導(dǎo)向程式設(shè)計(jì)參考書(shū)目:1.洪維恩,C+教學(xué)手冊(cè)第三版,旗標(biāo)出版圖書(shū)公司。2.陳錦揮,Java初學(xué)指引,博碩文化3.施威銘研究室著,最新Java2程式語(yǔ)言第2版,旗標(biāo)出版社。6.Java語(yǔ)言進(jìn)階(III)函數(shù),Chih-HungWang,1,函式在物件導(dǎo)向中,由於隸屬於某一類(lèi)別,故稱(chēng)為成員函式(memberfunction),又稱(chēng)為方法(method)。因此在本書(shū)中,我們可能以函式、成員函式、方法等名詞來(lái)解說(shuō),其實(shí)指的都是method。,認(rèn)識(shí)函式,什麼是函式Java提供的函式功能與數(shù)學(xué)的函數(shù)類(lèi)似,在數(shù)學(xué)函數(shù)中,我們輸入函數(shù)的參數(shù)並經(jīng)過(guò)函數(shù)處理後,將可以得到函數(shù)的輸出結(jié)果。在Java的函式中,同樣地也是如此,我們必須輸入函式的引數(shù)(Argument),經(jīng)過(guò)函式的處理之後,可以獲得一個(gè)輸出結(jié)果(即函式回傳值)例如:valueOf()就是隸屬於String類(lèi)別用來(lái)將數(shù)值轉(zhuǎn)換為字串的函式。兩者的比較如下圖示意。,認(rèn)識(shí)函式,什麼是函式,認(rèn)識(shí)函式,數(shù)學(xué)函數(shù)與Java函式比較圖,什麼是函式Java的函式與數(shù)學(xué)函數(shù)類(lèi)似,在數(shù)學(xué)函數(shù)中,我們會(huì)規(guī)定該數(shù)學(xué)函數(shù)的定義域範(fàn)圍,例如:x,y為任意正數(shù)同樣地,我們也必須限制Java函式輸入引數(shù)的資料型態(tài),例如:i必須為整數(shù)。比較不一樣的地方是在Java函式回傳值的資料型態(tài)方面,我們必須在函式宣告時(shí)加以定義回傳值的資料型態(tài),同時(shí),Java也允許函式?jīng)]有回傳值。,認(rèn)識(shí)函式,函式的優(yōu)點(diǎn)與特性程式語(yǔ)言的函式雖然與數(shù)學(xué)的函數(shù)有些類(lèi)似,但設(shè)計(jì)的目的則略有不同程式語(yǔ)言的函式可以視為【一群敘述的集合】,因此我們常常會(huì)將某些經(jīng)常使用的敘述群,直接用一個(gè)函式加以包裝,然後在需要使用時(shí),直接呼叫該函式,如此便可以有效重複利用程式碼。Java函式的特點(diǎn)整理如下:1.Java的函式隸屬於某一個(gè)類(lèi)別,函式擁有屬於自己的名稱(chēng),除非透過(guò)多載(overload)技術(shù),否則不允許宣告兩個(gè)相同名稱(chēng)的函式。,認(rèn)識(shí)函式,函式的優(yōu)點(diǎn)與特性2.函式內(nèi)宣告的變數(shù)為區(qū)域變數(shù),換句話(huà)說(shuō),在不同函式內(nèi)可以使用相同的變數(shù)名稱(chēng),因?yàn)樵撟償?shù)只會(huì)在該函式中生效。3.函式最好具有特定功能(並以該功能來(lái)命名函式),並且函式的程式碼應(yīng)該越簡(jiǎn)單越好,如此才能夠提高程式的可讀性並有利於除錯(cuò)與日後的維護(hù)。4.對(duì)於發(fā)展大型類(lèi)別而言,將物件可能使用的功能製作為方法(即函式),可以交由許多的程式設(shè)計(jì)師分工撰寫(xiě)各個(gè)方法,如此一來(lái),可以加快類(lèi)別的開(kāi)發(fā)速度,不過(guò)在切割功能及實(shí)際撰寫(xiě)方法之前,必須討論出一定的規(guī)格,以免發(fā)生不協(xié)調(diào)的狀況。5.類(lèi)別內(nèi)撰寫(xiě)的函式分為staticmethod與一般method,其中,staticmethod內(nèi)的敘述只能呼叫staticmethod。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程我們可以直接使用別人已經(jīng)撰寫(xiě)好的函式,只要知道該函式所屬之類(lèi)別,透過(guò)import引入該類(lèi)別即可。例如:我們只要先引入Java提供的java.lang.String類(lèi)別,就可以直接使用valueOf()函式,而不必自行撰寫(xiě)valueOf()函式。如果該函式被宣告為static,則不用產(chǎn)生物件即可使用。當(dāng)主程式呼叫函式時(shí),程式的控制權(quán)將會(huì)轉(zhuǎn)移到相對(duì)應(yīng)的函式開(kāi)頭處,然後執(zhí)行函式中的程式碼,函式的程式碼執(zhí)行完畢後,程式控制權(quán)將重新回到主程式碼(呼叫敘述)的下一個(gè)敘述,繼續(xù)往下執(zhí)行。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程【觀(guān)念範(fàn)例6-1】:藉由範(fàn)例說(shuō)明函式呼叫與返回的程式流程控制權(quán)之轉(zhuǎn)移。範(fàn)例6-1:ch6_01.java(隨書(shū)光碟myJavach06ch6_01.java),認(rèn)識(shí)函式,函式呼叫與返回示意圖(程式控制權(quán)的轉(zhuǎn)移),呼叫函式的執(zhí)行流程,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程執(zhí)行結(jié)果:範(fàn)例說(shuō)明:(1)第7行:引入類(lèi)別java.lang.Math,該類(lèi)別中包含有pow()與log10()兩個(gè)staticmethod。這兩個(gè)staticmethod的宣告原型如下:,認(rèn)識(shí)函式,7.0的4.0次方=2401.02401.0取10的對(duì)數(shù)=3.3803921600570273,所屬類(lèi)別:java.lang.Math語(yǔ)法:staticdoublepow(doublea,doubleb)功能:回傳a的b次方,所屬類(lèi)別:java.lang.Math語(yǔ)法:publicstaticdoublelog10(doublea)功能:回傳a的對(duì)數(shù)(以10為底),呼叫函式的執(zhí)行流程範(fàn)例說(shuō)明:(2)第16行:呼叫pow函式,幫我們計(jì)算i的j次方,回傳值由powNum接收。(3)第18行:呼叫l(wèi)og10函式,幫我們計(jì)算powNum的對(duì)數(shù)(以10為底),回傳值由logNum接收。(4)由於第6行已經(jīng)引入所有java.lang的所有類(lèi)別,因此,第7行可以省略,不過(guò)由於要提醒這兩個(gè)函式的類(lèi)別名稱(chēng),故我們?nèi)詫⒅A?。事?shí)上,java.lang.Math並不會(huì)被引入兩次,因?yàn)榫幾g器會(huì)替我們檢查是否有重複引入的類(lèi)別。(5)整個(gè)程式的流程如下圖所示。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程範(fàn)例說(shuō)明:,認(rèn)識(shí)函式,範(fàn)例6-1的程式流程,除了使用Java或其他廠(chǎng)商開(kāi)發(fā)的類(lèi)別函式,我們也可以自行發(fā)展類(lèi)別與函式。由於目前我們只學(xué)習(xí)到主類(lèi)別,因此本章內(nèi)容以發(fā)展主類(lèi)別的函式為主。至於其他類(lèi)別的函式則由下一章開(kāi)始介紹。,自行定義函式,函式定義在使用函式之前,必須先定義函式內(nèi)容(也就是函式的定義)。函式的內(nèi)容決定了該函式究竟提供了什麼樣的服務(wù)。定義主類(lèi)別其他函式的語(yǔ)法:,行定義函式,封裝等級(jí)static回傳值型態(tài)method名稱(chēng)(資料型態(tài)引數(shù)1,資料型態(tài)引數(shù)2,)函式主體(程式碼)return;,函式定義【語(yǔ)法說(shuō)明】:1.封裝等級(jí)我們將於下一章之後開(kāi)始介紹,此處使用public即可。2.由於主函式被宣告為static,而staticmethod內(nèi)的程式碼只能呼叫staticmethod,因此為了要讓主函式main呼叫,故必須宣告為staticmethod。3.若函式?jīng)]有回傳值,此時(shí)可將回傳值型態(tài)宣告為void。4.method名稱(chēng)小括號(hào)內(nèi)則是引數(shù)群,每宣告一個(gè)輸入引數(shù),都必須清楚地宣告該引數(shù)的資料型態(tài)及名稱(chēng)。5.引數(shù)的命名規(guī)則與一般變數(shù)的命名規(guī)則相同。,行定義函式,函式定義【語(yǔ)法說(shuō)明】:6.輸入引數(shù)在函式主體內(nèi)屬於合法的資料變數(shù),也就是說(shuō),我們不用在函式主體內(nèi)宣告這些引數(shù),就可以直接將這些輸入引數(shù)當(dāng)作已宣告的變數(shù)使用。7.若無(wú)引數(shù)需要傳遞,則引數(shù)列可以為空白,但()不可省略。8.具有回傳值的函式,在函式主體內(nèi)應(yīng)該包含一個(gè)以上的return敘述,以便傳回資料。不具回傳值的函式則可以沒(méi)有return敘述。9.具有回傳值的函式,其return後面應(yīng)該接上與回傳值相容資料型態(tài)的常數(shù)、變數(shù)或運(yùn)算式。,自行定義函式,函式定義10.【合法的函式定義範(fàn)例】,自行定義函式,函式定義10.【合法的函式定義範(fàn)例】(續(xù)),行定義函式,函式呼叫函式經(jīng)由定義後,必須透過(guò)函式呼叫才能實(shí)際應(yīng)用該函式。函式呼叫可以視為一種轉(zhuǎn)移控制權(quán)的敘述。當(dāng)程式執(zhí)行過(guò)程中,遇到函式呼叫時(shí),控制權(quán)將被轉(zhuǎn)移到被呼叫函式的起始點(diǎn),並執(zhí)行該函式的程式碼(即函式定義),當(dāng)這些程式碼被執(zhí)行完畢後(或遇到return敘述時(shí)),將會(huì)把控制權(quán)再交還給原來(lái)發(fā)生函式呼叫的程式執(zhí)行點(diǎn),繼續(xù)執(zhí)行下一個(gè)敘述。,自行定義函式,函式呼叫在Java中,呼叫端與被呼叫端若隸屬同一類(lèi)別,則呼叫函式的語(yǔ)法如下:語(yǔ)法1(函式無(wú)回傳值):語(yǔ)法2(函式有回傳值):,自行定義函式,method名稱(chēng)(傳入引數(shù)串列);,變數(shù)=method名稱(chēng)(傳入引數(shù)串列);,函式呼叫【語(yǔ)法說(shuō)明】:1.呼叫敘述與被呼叫函式間若無(wú)資料需要傳遞,則只需要使用method名稱(chēng)();來(lái)呼叫函式即可。否則,必須要一一對(duì)應(yīng)輸入所需要的引數(shù)。2.若函式有回傳值,則可以使用一個(gè)相容資料型態(tài)的變數(shù)來(lái)接收這個(gè)函式回傳值。,自行定義函式,函式呼叫【語(yǔ)法說(shuō)明】:3.函式呼叫敘述必須與函式名稱(chēng)相同,但兩者之引數(shù)名稱(chēng)可以不同。若呼叫者(CallingProgram)有資料要傳遞給被呼叫者(CalledProgram),則必須藉由傳入引數(shù)串列將資料傳遞給函式,並且傳入引數(shù)串列(在程式語(yǔ)言中稱(chēng)之為實(shí)引數(shù)串列)的傳入變數(shù)會(huì)由函式定義的引數(shù)串列(在程式語(yǔ)言中稱(chēng)之為虛引數(shù)串列)的相對(duì)引數(shù)來(lái)接收,其順序、個(gè)數(shù)、資料型態(tài)必須相同(不會(huì)做自動(dòng)轉(zhuǎn)型)但引數(shù)名稱(chēng)可以不同。如下圖示意:(圖中3.14必須指定為float型態(tài)的3.14f,否則會(huì)被視為double,而由於不會(huì)自動(dòng)轉(zhuǎn)型,故會(huì)發(fā)生錯(cuò)誤),自行定義函式,函式呼叫【觀(guān)念範(fàn)例6-2】:不使用Math類(lèi)別的pow函式,自行製作一個(gè)函式(power函式),功能為計(jì)算Xn。(X為double型態(tài)、n為int型態(tài))。範(fàn)例6-2:ch6_02.java(隨書(shū)光碟myJavach06ch6_02.java),自行定義函式,實(shí)引數(shù)與虛引數(shù)的對(duì)應(yīng),函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說(shuō)明:(1)第2431行:power函式的定義,用來(lái)計(jì)算Xn?;貍髦档馁Y料型態(tài)是double,接受兩個(gè)傳入引數(shù),資料型態(tài)分別是double,int,而第30行return後面的變數(shù)powerXn是回傳值。,自行定義函式,計(jì)算3.5的k次方?請(qǐng)輸入k=53.5的5次方=525.21875,函式呼叫範(fàn)例說(shuō)明:(2)第19行:呼叫power函式,傳入的引數(shù)為3.5,k,與函式定義的引數(shù)名稱(chēng)不相同,其實(shí)這並不重要,只要傳入符合資料型態(tài)的數(shù)值或變數(shù)即可(您也可以將兩個(gè)引數(shù)名稱(chēng)設(shè)為相同,但即使如此,這兩個(gè)仍是不同的變數(shù),我們將在後面介紹傳值呼叫時(shí)詳加說(shuō)明)。使用Ans變數(shù)來(lái)存放函式回傳值。(3)函式呼叫之引數(shù)傳遞與回傳值如下圖。,自行定義函式,函式呼叫範(fàn)例說(shuō)明:,自行定義函式,範(fàn)例6-2的函式呼叫與回傳值,函式呼叫【實(shí)用及觀(guān)念範(fàn)例6-3】:製作三個(gè)函式(Odd、Even、TotalSum函式),功能分別為計(jì)算奇數(shù)和、偶數(shù)和、整數(shù)和。(其中的整數(shù)和請(qǐng)使用奇數(shù)和與偶數(shù)和之函式)。範(fàn)例6-3:ch6_03.java(隨書(shū)光碟myJavach06ch6_03.java),自行定義函式,函式呼叫,自行定義函式,函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說(shuō)明:(1)第3744行:odd函式的定義,用來(lái)計(jì)算1+3+U的奇數(shù)和。(total是回傳值)(2)第4653行:even函式的定義,用來(lái)計(jì)算2+4+U的偶數(shù)和。(total是回傳值),自行定義函式,1+2+.+n=?請(qǐng)輸入n=10請(qǐng)問(wèn)要做奇數(shù)和(O),偶數(shù)和(E),還是整數(shù)和(I)?請(qǐng)選擇:I總和為55,函式呼叫範(fàn)例說(shuō)明:(3)第5558行:totalSum函式的定義,用來(lái)計(jì)算1+2+U的整數(shù)和。其中則呼叫了odd及even函式,幫忙做奇數(shù)和與偶數(shù)和,合起來(lái)就是整數(shù)和(函式應(yīng)盡量重覆使用以減少程式碼)。(4)第2333行:依據(jù)不同的選擇,決定呼叫不同的函式,完成不同的功能。請(qǐng)?zhí)貏e注意,當(dāng)使用者輸入非O、E、I時(shí),將會(huì)執(zhí)行default的程式,使用return結(jié)束main()的執(zhí)行,所以此時(shí)第34行不會(huì)被執(zhí)行。這說(shuō)明了return不但具有回傳值的功用,也同時(shí)會(huì)將控制權(quán)交回給呼叫方(在本例中,會(huì)將控制權(quán)交還給JVM),中斷函式的執(zhí)行。,自行定義函式,函式呼叫範(fàn)例說(shuō)明:(5)假設(shè)我們輸入的是10與O,則整個(gè)程式的執(zhí)行流程如下:,自行定義函式,1+2+.+n=?請(qǐng)輸入n=10請(qǐng)問(wèn)要做奇數(shù)和(O),偶數(shù)和(E),還是整數(shù)和(I)?請(qǐng)選擇:A選擇錯(cuò)誤,函式呼叫範(fàn)例說(shuō)明:,自行定義函式,範(fàn)例6-3的程式執(zhí)行流程(輸入10與O),函式呼叫【實(shí)用範(fàn)例6-4】:製作階層函式(factorial函式),功能為計(jì)算某一正整數(shù)的階層k!。並利用該函式求出的值,m、n為任意正整數(shù),範(fàn)例6-4:ch6_04.java(隨書(shū)光碟myJavach06ch6_04.java),自行定義函式,函式呼叫,自行定義函式,函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說(shuō)明:在這個(gè)範(fàn)例中,factorial()函式一共被呼叫了3次(第24、25、26行),充分利用函式,提高程式碼的重複使用率。【觀(guān)念範(fàn)例6-5】:製作一個(gè)專(zhuān)門(mén)用來(lái)列印九九乘法表的函式(print99函式),該函式不接受任何傳入引數(shù),也不回傳任何資料。範(fàn)例6-5:ch6_05.java(隨書(shū)光碟myJavach06ch6_05.java),自行定義函式,求排列組合C(m,n)m=10n=8C(10,8)=45,自行定義函式,函式呼叫執(zhí)行結(jié)果:(同範(fàn)例4-14)範(fàn)例說(shuō)明:(1)第15行,由於沒(méi)有傳入引數(shù),因此引數(shù)串列為空。由於函式不需要回傳值,所以必須將函式回傳值的資料型態(tài)設(shè)為void。(2)第12行為函式呼叫,雖然不必傳入引數(shù),但()仍不可省略。(3)print99()函式中,並無(wú)return敘述,所以函式會(huì)執(zhí)行到最後一行(第23行),然後才返回呼叫函式處。,自行定義函式,return敘述return敘述一共有2個(gè)功用:(1)回傳函式資料及(2)函式返回。其規(guī)定可歸納如下。return回傳資料使用return回傳資料的語(yǔ)法如下:,自行定義函式,return常數(shù)、變數(shù)、運(yùn)算式或其他具有結(jié)果值的敘述;,return敘述【語(yǔ)法說(shuō)明】:(1)回傳函式資料的資料型態(tài)必須和函式定義的回傳值資料型態(tài)相容(需可進(jìn)行自動(dòng)轉(zhuǎn)型)。範(fàn)例:(2)函式回傳值資料型態(tài)若被宣告為void,則不用return回傳值。(3)若回傳值為運(yùn)算式或其他具有結(jié)果值的敘述,則會(huì)先計(jì)算其運(yùn)算結(jié)果,然後才傳回該值。,自行定義函式,return敘述使用return返回使用return返回呼叫函式敘述如下:【語(yǔ)法說(shuō)明】:(1)使用return將返回呼叫函式處,並由呼叫函式的下一個(gè)敘述開(kāi)始執(zhí)行。(2)一個(gè)函式的return並不限定為一個(gè),不過(guò)一旦執(zhí)行return敘述後,其餘函式內(nèi)未被執(zhí)行的敘述將不會(huì)被執(zhí)行。(3)無(wú)回傳值的函式,不需要用return敘述返回,此時(shí)函式將被執(zhí)行完畢後,才會(huì)返回呼叫函式處。而若使用return敘述返回,則在return之後的敘述不會(huì)被執(zhí)行?!居^(guān)念範(fàn)例6-6】:設(shè)計(jì)一個(gè)包含有多個(gè)return敘述的函式,觀(guān)察其執(zhí)行過(guò)程。範(fàn)例6-6:ch6_06.java(隨書(shū)光碟myJavach06ch6_06.java),自行定義函式,return;,return函式回傳值;,或,return敘述,自行定義函式,return敘述執(zhí)行結(jié)果:範(fàn)例說(shuō)明:(1)程式執(zhí)行的行數(shù)順序?yàn)?1、12、14(函式呼叫)、19、20、21、22(返回)、15、(16)。亦即程式的2326行將不會(huì)被執(zhí)行。(2)執(zhí)行第14行時(shí),會(huì)先計(jì)算a+b的值(6+7=13),然後回傳13給呼叫函式的敘述,並返回函式呼叫處,因此k為13。,自行定義函式,k=13,return敘述範(fàn)例說(shuō)明:(3)Java的編譯器頗為聰明,如果您刪除第22行與第24行的if(a0),僅留下returna+b;,則它會(huì)指出第23行執(zhí)行不到,提醒程式設(shè)計(jì)師,程式可能有某些邏輯上的錯(cuò)誤。但若如本範(fàn)例,加上一些條件判斷後,它就不一定能夠找出程式邏輯上的錯(cuò)誤。(4)同樣地,如果您將第26行改寫(xiě)如第22行,則Java的編譯器會(huì)顯示出找不到return的錯(cuò)誤(因?yàn)樵摵降男嫣幰呀?jīng)註明要回傳一個(gè)int型態(tài)的回傳值),雖然這樣子的修改,程式實(shí)際上是會(huì)回傳一個(gè)值,但Java的編譯器並沒(méi)有那麼聰明。此時(shí),可以在最後加入return0;之類(lèi)的敘述以避開(kāi)編譯錯(cuò)誤,不過(guò)您必須先確定該行絕對(duì)不可能被執(zhí)行到。,自行定義函式,Practice1,寫(xiě)一個(gè)函式StringcopyStr(intn,Stringstr),將傳入的str字串複製n次後回傳。使用main()函式呼叫它。呼叫敘述為myString=copyStr(3,“Java”);。並將myString印出。,48,Practice2,設(shè)計(jì)出一個(gè)函式voidprint_total_mul(inta,intb),列印ab乘法表,如a=5,b=8則印出5*5=255*6=305*7=355*8=406*5=306*6=366*7=426*8=487*5=357*6=427*7=497*8=568*5=408*6=488*7=568*8=64當(dāng)a=8,b=5時(shí),輸出相同,若a=1,b=9恰為九九乘法表。,49,傳遞陣列傳遞陣列首先要將引數(shù)的資料型態(tài)設(shè)定為陣列,並且維度必須正確例如傳遞一維整數(shù)陣列應(yīng)該宣告為int,二維陣列應(yīng)該宣告為int,依此類(lèi)推。當(dāng)傳遞的引數(shù)被宣告物件或陣列時(shí),由於物件名稱(chēng)與陣列名稱(chēng)本身只是一個(gè)實(shí)體的參考(reference),故它只會(huì)將該參考傳遞給被呼叫端相對(duì)應(yīng)的引數(shù)。故被呼叫端函式可以透過(guò)這個(gè)參考修改原呼叫端的物件或陣列實(shí)體內(nèi)容。,引數(shù)串列與引數(shù)傳遞,傳遞陣列有些書(shū)籍將這種引數(shù)傳遞視為傳參考呼叫(passbyreference),而本書(shū)則將此視為傳參考值呼叫(passbyvalueofreference)。我們透過(guò)下面這個(gè)範(fàn)例,觀(guān)察傳遞陣列時(shí)的引數(shù)傳遞原理。【觀(guān)念範(fàn)例6-10】:利用傳參考值呼叫傳遞陣列。範(fàn)例6-10:ch6_10.java(隨書(shū)光碟myJavach06ch6_10.java),引數(shù)串列與引數(shù)傳遞,傳遞陣列,引數(shù)串列與引數(shù)傳遞,傳遞陣列執(zhí)行結(jié)果:,引數(shù)串列與引數(shù)傳遞,第1個(gè)隨機(jī)亂數(shù)為31第2個(gè)隨機(jī)亂數(shù)為15第3個(gè)隨機(jī)亂數(shù)為21第4個(gè)隨機(jī)亂數(shù)為32第5個(gè)隨機(jī)亂數(shù)為39第6個(gè)隨機(jī)亂數(shù)為16樂(lè)透號(hào)碼如下.311521323916,傳遞陣列範(fàn)例說(shuō)明:(1)從執(zhí)行結(jié)果中,我們可以得知lotto陣列與arr陣列都參考到同一個(gè)陣列實(shí)體,所以在generate_lotto函式中對(duì)arr陣列元素的修改都將會(huì)影響main函式的lotto陣列元素值(共用同一塊記憶體空間)。(2)第20行的引數(shù)也可以修改為intarr,只要是正確的陣列變數(shù)宣告方式即可。(3)事實(shí)上,當(dāng)呼叫g(shù)enerate_lotto函式,記憶體的變化如下:,引數(shù)串列與引數(shù)傳遞,傳遞陣列,引數(shù)串列與引數(shù)傳遞,傳遞陣列示意圖(傳參考值呼叫),既然陣列或物件變數(shù)是一個(gè)參考,當(dāng)我們要回傳陣列或物件時(shí),是否需要回傳整個(gè)陣列或物件實(shí)體,還是只要回傳變數(shù)(參考)即可。我們透過(guò)下面這個(gè)範(fàn)例來(lái)說(shuō)明:【觀(guān)念範(fàn)例6-11】:改寫(xiě)範(fàn)例6-10,將產(chǎn)生陣列實(shí)體敘述放置於被呼叫函式內(nèi),並回傳該陣列。範(fàn)例6-11:ch6_11.java(隨書(shū)光碟myJavach06ch6_11.java),回傳陣列,回傳陣列,執(zhí)行結(jié)果:(同範(fàn)例6-11,但因亂數(shù)緣故,值可能不同)範(fàn)例說(shuō)明:(1)第20行的回傳值資料型態(tài)為int,代表要回傳一個(gè)整數(shù)一維陣列。(2)從執(zhí)行結(jié)果中,我們可以得知lotto陣列變數(shù)可以存放arr所回傳的陣列參考,使得將之指向同一個(gè)陣列實(shí)體,然而,我們?cè)谇懊嫣徇^(guò),在函式內(nèi)宣告的為區(qū)域變數(shù),而arr也是一個(gè)區(qū)域變數(shù),這意味著當(dāng)函式執(zhí)行完畢時(shí),它將被釋放。但釋放的只是陣列的參考而非陣列實(shí)體,因此在函式內(nèi)產(chǎn)生的陣列實(shí)體仍可以保留,並由第16行取出其元素。,回傳陣列,範(fàn)例說(shuō)明:(3)您或許會(huì)產(chǎn)生一個(gè)疑問(wèn),萬(wàn)一該函式在宣告時(shí)並不回傳陣列變數(shù),那麼當(dāng)函式執(zhí)行完畢時(shí),陣列參考被釋放了,而陣列實(shí)體並未被釋放,可是又沒(méi)有任何參考變數(shù)可以指向它,那麼陣列實(shí)體豈不成為記憶體中的垃圾而浪費(fèi)記憶體空間嗎?沒(méi)錯(cuò),但您不用煩惱,因?yàn)镴ava提供了GarbageCollection機(jī)制,對(duì)於沒(méi)有被任何變數(shù)參考的陣列或物件實(shí)體,JVM將會(huì)定期地自動(dòng)清除。我們將於後面章節(jié)說(shuō)明Java的GarbageCollection機(jī)制。(4)本範(fàn)例的記憶體的變化如下:,回傳陣列,回傳陣列,回傳陣列示意圖,函式可以接受呼叫者傳入的引數(shù)值,那麼main函式也可以嗎?答案是肯定的,不過(guò)main的引數(shù)串列已經(jīng)在Java中詳細(xì)定義,使用者不得更改。main函式的引數(shù)是用來(lái)接收J(rèn)VM的命令參數(shù)例如:我們?cè)贒os命令列中,若輸入javatestThisisabook,則代表要求JVM執(zhí)行test類(lèi)別,並將Thisisabook等四個(gè)字串傳入test類(lèi)別的main函式中。,main函式的引數(shù)串列,main函式的引數(shù)被宣告字串陣列Stringargs或Stringargs。我們可以在main()函式中取用這些字串,做其他進(jìn)一步的應(yīng)用?!居^(guān)念範(fàn)例6-16】:接收由JVM傳送過(guò)來(lái)的參數(shù)。範(fàn)例6-16:ch6_16.java(隨書(shū)光碟myJavach06ch6_16.java),main函式的引數(shù)串列,執(zhí)行結(jié)果:,main函式的引數(shù)串列,C:javamyJava.ch06.ch6_16Thisisabook本程式共接受到4個(gè)輸入?yún)?shù)args0字串為T(mén)hisargs1字串為isargs2字串為aargs3字串為book,範(fàn)例說(shuō)明:在執(zhí)行結(jié)果中,我們先要求JVM執(zhí)行myJava.ch06Package的ch6_16類(lèi)別,並傳送This、is、a、book等四個(gè)額外參數(shù)給ch6_16類(lèi)別的main()函式。【實(shí)用及觀(guān)念範(fàn)例6-17】:由於範(fàn)例6-15可以修改為其他球數(shù)的樂(lè)透遊戲,因此我們將範(fàn)例6-17改寫(xiě)為由使用者在輸入命令列參數(shù)時(shí)決定要開(kāi)出的球數(shù)(球數(shù)當(dāng)然應(yīng)該不可超過(guò)48球,因?yàn)楸仨毐A粢粋€(gè)球作為特別號(hào))。範(fàn)例6-17:ch6_17.java(隨書(shū)光碟myJavach06ch6_17.java),main函式的引數(shù)串列,main函式的引數(shù)串列,執(zhí)行結(jié)果:,main函式的引數(shù)串列,C:javamyJava.ch06.ch6_1748樂(lè)透號(hào)碼如下.363547412393343342510281937482016293294024211715301814421112273649462264531382313844527特別號(hào):41,範(fàn)例說(shuō)明:(1)我們修改了main()函式,讓使用者可以指定開(kāi)出的球數(shù)(若使用者輸入超過(guò)48或其他文字,則會(huì)執(zhí)行return提前結(jié)束程式)。(2)第15行,由於輸入的參數(shù)會(huì)被存放到字串陣列,因此,必須將字串轉(zhuǎn)換為數(shù)值。,main函式的引數(shù)串列,在前面曾經(jīng)提及,若區(qū)域變數(shù)被宣告為final,則該區(qū)域變數(shù)在第一次被設(shè)定某個(gè)值之後,就不可以再被設(shè)定。由於函式引數(shù)列的引數(shù)可以被當(dāng)作區(qū)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信建設(shè)工程施工合同范本
- 電子商務(wù)物流供應(yīng)鏈管理合同
- 新能源汽車(chē)電池供應(yīng)商供應(yīng)合同
- 金融產(chǎn)品推廣及銷(xiāo)售合作協(xié)議
- 小王子童話(huà)書(shū)征文
- 房地產(chǎn)經(jīng)紀(jì)公司買(mǎi)賣(mài)合同風(fēng)險(xiǎn)告知書(shū)
- 茶葉項(xiàng)目可行性分析報(bào)告(模板參考范文)
- 展廳租賃合同
- 送教下鄉(xiāng)的課程設(shè)計(jì)與實(shí)施
- 虛擬現(xiàn)實(shí)技術(shù)研發(fā)應(yīng)用合同
- 小學(xué)網(wǎng)管的工作總結(jié)
- 診所校驗(yàn)現(xiàn)場(chǎng)審核表
- 派出所上戶(hù)口委托書(shū)
- 醫(yī)院6s管理成果匯報(bào)護(hù)理課件
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 第19章 一次函數(shù) 單元整體教學(xué)設(shè)計(jì) 【 學(xué)情分析指導(dǎo) 】 人教版八年級(jí)數(shù)學(xué)下冊(cè)
- 電梯結(jié)構(gòu)與原理-第2版-全套課件
- IEC-62368-1-差異分享解讀
- 2022-2023學(xué)年廣東省佛山市順德區(qū)高三(下)模擬英語(yǔ)試卷
- 節(jié)后復(fù)工培訓(xùn)內(nèi)容五篇
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
評(píng)論
0/150
提交評(píng)論