程式設(shè)計(jì)參考書目1.ppt_第1頁
程式設(shè)計(jì)參考書目1.ppt_第2頁
程式設(shè)計(jì)參考書目1.ppt_第3頁
程式設(shè)計(jì)參考書目1.ppt_第4頁
程式設(shè)計(jì)參考書目1.ppt_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余68頁可下載查看

下載本文檔

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

文檔簡介

物件導(dǎo)向程式設(shè)計(jì)參考書目:1.洪維恩,C+教學(xué)手冊(cè)第三版,旗標(biāo)出版圖書公司。2.陳錦揮,Java初學(xué)指引,博碩文化3.施威銘研究室著,最新Java2程式語言第2版,旗標(biāo)出版社。6.Java語言進(jìn)階(III)函數(shù),Chih-HungWang,1,函式在物件導(dǎo)向中,由於隸屬於某一類別,故稱為成員函式(memberfunction),又稱為方法(method)。因此在本書中,我們可能以函式、成員函式、方法等名詞來解說,其實(shí)指的都是method。,認(rèn)識(shí)函式,什麼是函式Java提供的函式功能與數(shù)學(xué)的函數(shù)類似,在數(shù)學(xué)函數(shù)中,我們輸入函數(shù)的參數(shù)並經(jīng)過函數(shù)處理後,將可以得到函數(shù)的輸出結(jié)果。在Java的函式中,同樣地也是如此,我們必須輸入函式的引數(shù)(Argument),經(jīng)過函式的處理之後,可以獲得一個(gè)輸出結(jié)果(即函式回傳值)例如:valueOf()就是隸屬於String類別用來將數(shù)值轉(zhuǎn)換為字串的函式。兩者的比較如下圖示意。,認(rèn)識(shí)函式,什麼是函式,認(rèn)識(shí)函式,數(shù)學(xué)函數(shù)與Java函式比較圖,什麼是函式Java的函式與數(shù)學(xué)函數(shù)類似,在數(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)與特性程式語言的函式雖然與數(shù)學(xué)的函數(shù)有些類似,但設(shè)計(jì)的目的則略有不同程式語言的函式可以視為【一群敘述的集合】,因此我們常常會(huì)將某些經(jīng)常使用的敘述群,直接用一個(gè)函式加以包裝,然後在需要使用時(shí),直接呼叫該函式,如此便可以有效重複利用程式碼。Java函式的特點(diǎn)整理如下:1.Java的函式隸屬於某一個(gè)類別,函式擁有屬於自己的名稱,除非透過多載(overload)技術(shù),否則不允許宣告兩個(gè)相同名稱的函式。,認(rèn)識(shí)函式,函式的優(yōu)點(diǎn)與特性2.函式內(nèi)宣告的變數(shù)為區(qū)域變數(shù),換句話說,在不同函式內(nèi)可以使用相同的變數(shù)名稱,因?yàn)樵撟償?shù)只會(huì)在該函式中生效。3.函式最好具有特定功能(並以該功能來命名函式),並且函式的程式碼應(yīng)該越簡單越好,如此才能夠提高程式的可讀性並有利於除錯(cuò)與日後的維護(hù)。4.對(duì)於發(fā)展大型類別而言,將物件可能使用的功能製作為方法(即函式),可以交由許多的程式設(shè)計(jì)師分工撰寫各個(gè)方法,如此一來,可以加快類別的開發(fā)速度,不過在切割功能及實(shí)際撰寫方法之前,必須討論出一定的規(guī)格,以免發(fā)生不協(xié)調(diào)的狀況。5.類別內(nèi)撰寫的函式分為staticmethod與一般method,其中,staticmethod內(nèi)的敘述只能呼叫staticmethod。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程我們可以直接使用別人已經(jīng)撰寫好的函式,只要知道該函式所屬之類別,透過import引入該類別即可。例如:我們只要先引入Java提供的java.lang.String類別,就可以直接使用valueOf()函式,而不必自行撰寫valueOf()函式。如果該函式被宣告為static,則不用產(chǎn)生物件即可使用。當(dāng)主程式呼叫函式時(shí),程式的控制權(quán)將會(huì)轉(zhuǎn)移到相對(duì)應(yīng)的函式開頭處,然後執(zhí)行函式中的程式碼,函式的程式碼執(zhí)行完畢後,程式控制權(quán)將重新回到主程式碼(呼叫敘述)的下一個(gè)敘述,繼續(xù)往下執(zhí)行。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程【觀念範(fàn)例6-1】:藉由範(fàn)例說明函式呼叫與返回的程式流程控制權(quán)之轉(zhuǎn)移。範(fàn)例6-1:ch6_01.java(隨書光碟myJavach06ch6_01.java),認(rèn)識(shí)函式,函式呼叫與返回示意圖(程式控制權(quán)的轉(zhuǎn)移),呼叫函式的執(zhí)行流程,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程執(zhí)行結(jié)果:範(fàn)例說明:(1)第7行:引入類別java.lang.Math,該類別中包含有pow()與log10()兩個(gè)staticmethod。這兩個(gè)staticmethod的宣告原型如下:,認(rèn)識(shí)函式,7.0的4.0次方=2401.02401.0取10的對(duì)數(shù)=3.3803921600570273,所屬類別:java.lang.Math語法:staticdoublepow(doublea,doubleb)功能:回傳a的b次方,所屬類別:java.lang.Math語法:publicstaticdoublelog10(doublea)功能:回傳a的對(duì)數(shù)(以10為底),呼叫函式的執(zhí)行流程範(fàn)例說明:(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的所有類別,因此,第7行可以省略,不過由於要提醒這兩個(gè)函式的類別名稱,故我們?nèi)詫⒅A?。事?shí)上,java.lang.Math並不會(huì)被引入兩次,因?yàn)榫幾g器會(huì)替我們檢查是否有重複引入的類別。(5)整個(gè)程式的流程如下圖所示。,認(rèn)識(shí)函式,呼叫函式的執(zhí)行流程範(fàn)例說明:,認(rèn)識(shí)函式,範(fàn)例6-1的程式流程,除了使用Java或其他廠商開發(fā)的類別函式,我們也可以自行發(fā)展類別與函式。由於目前我們只學(xué)習(xí)到主類別,因此本章內(nèi)容以發(fā)展主類別的函式為主。至於其他類別的函式則由下一章開始介紹。,自行定義函式,函式定義在使用函式之前,必須先定義函式內(nèi)容(也就是函式的定義)。函式的內(nèi)容決定了該函式究竟提供了什麼樣的服務(wù)。定義主類別其他函式的語法:,行定義函式,封裝等級(jí)static回傳值型態(tài)method名稱(資料型態(tài)引數(shù)1,資料型態(tài)引數(shù)2,)函式主體(程式碼)return;,函式定義【語法說明】:1.封裝等級(jí)我們將於下一章之後開始介紹,此處使用public即可。2.由於主函式被宣告為static,而staticmethod內(nèi)的程式碼只能呼叫staticmethod,因此為了要讓主函式main呼叫,故必須宣告為staticmethod。3.若函式?jīng)]有回傳值,此時(shí)可將回傳值型態(tài)宣告為void。4.method名稱小括號(hào)內(nèi)則是引數(shù)群,每宣告一個(gè)輸入引數(shù),都必須清楚地宣告該引數(shù)的資料型態(tài)及名稱。5.引數(shù)的命名規(guī)則與一般變數(shù)的命名規(guī)則相同。,行定義函式,函式定義【語法說明】:6.輸入引數(shù)在函式主體內(nèi)屬於合法的資料變數(shù),也就是說,我們不用在函式主體內(nèi)宣告這些引數(shù),就可以直接將這些輸入引數(shù)當(dāng)作已宣告的變數(shù)使用。7.若無引數(shù)需要傳遞,則引數(shù)列可以為空白,但()不可省略。8.具有回傳值的函式,在函式主體內(nèi)應(yīng)該包含一個(gè)以上的return敘述,以便傳回資料。不具回傳值的函式則可以沒有return敘述。9.具有回傳值的函式,其return後面應(yīng)該接上與回傳值相容資料型態(tài)的常數(shù)、變數(shù)或運(yùn)算式。,自行定義函式,函式定義10.【合法的函式定義範(fàn)例】,自行定義函式,函式定義10.【合法的函式定義範(fàn)例】(續(xù)),行定義函式,函式呼叫函式經(jīng)由定義後,必須透過函式呼叫才能實(shí)際應(yīng)用該函式。函式呼叫可以視為一種轉(zhuǎn)移控制權(quán)的敘述。當(dāng)程式執(zhí)行過程中,遇到函式呼叫時(shí),控制權(quán)將被轉(zhuǎn)移到被呼叫函式的起始點(diǎn),並執(zhí)行該函式的程式碼(即函式定義),當(dāng)這些程式碼被執(zhí)行完畢後(或遇到return敘述時(shí)),將會(huì)把控制權(quán)再交還給原來發(fā)生函式呼叫的程式執(zhí)行點(diǎn),繼續(xù)執(zhí)行下一個(gè)敘述。,自行定義函式,函式呼叫在Java中,呼叫端與被呼叫端若隸屬同一類別,則呼叫函式的語法如下:語法1(函式無回傳值):語法2(函式有回傳值):,自行定義函式,method名稱(傳入引數(shù)串列);,變數(shù)=method名稱(傳入引數(shù)串列);,函式呼叫【語法說明】:1.呼叫敘述與被呼叫函式間若無資料需要傳遞,則只需要使用method名稱();來呼叫函式即可。否則,必須要一一對(duì)應(yīng)輸入所需要的引數(shù)。2.若函式有回傳值,則可以使用一個(gè)相容資料型態(tài)的變數(shù)來接收這個(gè)函式回傳值。,自行定義函式,函式呼叫【語法說明】:3.函式呼叫敘述必須與函式名稱相同,但兩者之引數(shù)名稱可以不同。若呼叫者(CallingProgram)有資料要傳遞給被呼叫者(CalledProgram),則必須藉由傳入引數(shù)串列將資料傳遞給函式,並且傳入引數(shù)串列(在程式語言中稱之為實(shí)引數(shù)串列)的傳入變數(shù)會(huì)由函式定義的引數(shù)串列(在程式語言中稱之為虛引數(shù)串列)的相對(duì)引數(shù)來接收,其順序、個(gè)數(shù)、資料型態(tài)必須相同(不會(huì)做自動(dòng)轉(zhuǎn)型)但引數(shù)名稱可以不同。如下圖示意:(圖中3.14必須指定為float型態(tài)的3.14f,否則會(huì)被視為double,而由於不會(huì)自動(dòng)轉(zhuǎn)型,故會(huì)發(fā)生錯(cuò)誤),自行定義函式,函式呼叫【觀念範(fàn)例6-2】:不使用Math類別的pow函式,自行製作一個(gè)函式(power函式),功能為計(jì)算Xn。(X為double型態(tài)、n為int型態(tài))。範(fàn)例6-2:ch6_02.java(隨書光碟myJavach06ch6_02.java),自行定義函式,實(shí)引數(shù)與虛引數(shù)的對(duì)應(yīng),函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說明:(1)第2431行:power函式的定義,用來計(jì)算Xn。回傳值的資料型態(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)例說明:(2)第19行:呼叫power函式,傳入的引數(shù)為3.5,k,與函式定義的引數(shù)名稱不相同,其實(shí)這並不重要,只要傳入符合資料型態(tài)的數(shù)值或變數(shù)即可(您也可以將兩個(gè)引數(shù)名稱設(shè)為相同,但即使如此,這兩個(gè)仍是不同的變數(shù),我們將在後面介紹傳值呼叫時(shí)詳加說明)。使用Ans變數(shù)來存放函式回傳值。(3)函式呼叫之引數(shù)傳遞與回傳值如下圖。,自行定義函式,函式呼叫範(fàn)例說明:,自行定義函式,範(fàn)例6-2的函式呼叫與回傳值,函式呼叫【實(shí)用及觀念範(fàn)例6-3】:製作三個(gè)函式(Odd、Even、TotalSum函式),功能分別為計(jì)算奇數(shù)和、偶數(shù)和、整數(shù)和。(其中的整數(shù)和請(qǐng)使用奇數(shù)和與偶數(shù)和之函式)。範(fàn)例6-3:ch6_03.java(隨書光碟myJavach06ch6_03.java),自行定義函式,函式呼叫,自行定義函式,函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說明:(1)第3744行:odd函式的定義,用來計(jì)算1+3+U的奇數(shù)和。(total是回傳值)(2)第4653行:even函式的定義,用來計(jì)算2+4+U的偶數(shù)和。(total是回傳值),自行定義函式,1+2+.+n=?請(qǐng)輸入n=10請(qǐng)問要做奇數(shù)和(O),偶數(shù)和(E),還是整數(shù)和(I)?請(qǐng)選擇:I總和為55,函式呼叫範(fàn)例說明:(3)第5558行:totalSum函式的定義,用來計(jì)算1+2+U的整數(shù)和。其中則呼叫了odd及even函式,幫忙做奇數(shù)和與偶數(shù)和,合起來就是整數(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í)行。這說明了return不但具有回傳值的功用,也同時(shí)會(huì)將控制權(quán)交回給呼叫方(在本例中,會(huì)將控制權(quán)交還給JVM),中斷函式的執(zhí)行。,自行定義函式,函式呼叫範(fàn)例說明:(5)假設(shè)我們輸入的是10與O,則整個(gè)程式的執(zhí)行流程如下:,自行定義函式,1+2+.+n=?請(qǐng)輸入n=10請(qǐng)問要做奇數(shù)和(O),偶數(shù)和(E),還是整數(shù)和(I)?請(qǐng)選擇:A選擇錯(cuò)誤,函式呼叫範(fàn)例說明:,自行定義函式,範(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(隨書光碟myJavach06ch6_04.java),自行定義函式,函式呼叫,自行定義函式,函式呼叫,自行定義函式,函式呼叫執(zhí)行結(jié)果:範(fàn)例說明:在這個(gè)範(fàn)例中,factorial()函式一共被呼叫了3次(第24、25、26行),充分利用函式,提高程式碼的重複使用率?!居^念範(fàn)例6-5】:製作一個(gè)專門用來列印九九乘法表的函式(print99函式),該函式不接受任何傳入引數(shù),也不回傳任何資料。範(fàn)例6-5:ch6_05.java(隨書光碟myJavach06ch6_05.java),自行定義函式,求排列組合C(m,n)m=10n=8C(10,8)=45,自行定義函式,函式呼叫執(zhí)行結(jié)果:(同範(fàn)例4-14)範(fàn)例說明:(1)第15行,由於沒有傳入引數(shù),因此引數(shù)串列為空。由於函式不需要回傳值,所以必須將函式回傳值的資料型態(tài)設(shè)為void。(2)第12行為函式呼叫,雖然不必傳入引數(shù),但()仍不可省略。(3)print99()函式中,並無return敘述,所以函式會(huì)執(zhí)行到最後一行(第23行),然後才返回呼叫函式處。,自行定義函式,return敘述return敘述一共有2個(gè)功用:(1)回傳函式資料及(2)函式返回。其規(guī)定可歸納如下。return回傳資料使用return回傳資料的語法如下:,自行定義函式,return常數(shù)、變數(shù)、運(yùn)算式或其他具有結(jié)果值的敘述;,return敘述【語法說明】:(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返回呼叫函式敘述如下:【語法說明】:(1)使用return將返回呼叫函式處,並由呼叫函式的下一個(gè)敘述開始執(zhí)行。(2)一個(gè)函式的return並不限定為一個(gè),不過一旦執(zhí)行return敘述後,其餘函式內(nèi)未被執(zhí)行的敘述將不會(huì)被執(zhí)行。(3)無回傳值的函式,不需要用return敘述返回,此時(shí)函式將被執(zhí)行完畢後,才會(huì)返回呼叫函式處。而若使用return敘述返回,則在return之後的敘述不會(huì)被執(zhí)行?!居^念範(fàn)例6-6】:設(shè)計(jì)一個(gè)包含有多個(gè)return敘述的函式,觀察其執(zhí)行過程。範(fàn)例6-6:ch6_06.java(隨書光碟myJavach06ch6_06.java),自行定義函式,return;,return函式回傳值;,或,return敘述,自行定義函式,return敘述執(zhí)行結(jié)果:範(fàn)例說明:(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)例說明:(3)Java的編譯器頗為聰明,如果您刪除第22行與第24行的if(a0),僅留下returna+b;,則它會(huì)指出第23行執(zhí)行不到,提醒程式設(shè)計(jì)師,程式可能有某些邏輯上的錯(cuò)誤。但若如本範(fàn)例,加上一些條件判斷後,它就不一定能夠找出程式邏輯上的錯(cuò)誤。(4)同樣地,如果您將第26行改寫如第22行,則Java的編譯器會(huì)顯示出找不到return的錯(cuò)誤(因?yàn)樵摵降男嫣幰呀?jīng)註明要回傳一個(gè)int型態(tài)的回傳值),雖然這樣子的修改,程式實(shí)際上是會(huì)回傳一個(gè)值,但Java的編譯器並沒有那麼聰明。此時(shí),可以在最後加入return0;之類的敘述以避開編譯錯(cuò)誤,不過您必須先確定該行絕對(duì)不可能被執(zhí)行到。,自行定義函式,Practice1,寫一個(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,依此類推。當(dāng)傳遞的引數(shù)被宣告物件或陣列時(shí),由於物件名稱與陣列名稱本身只是一個(gè)實(shí)體的參考(reference),故它只會(huì)將該參考傳遞給被呼叫端相對(duì)應(yīng)的引數(shù)。故被呼叫端函式可以透過這個(gè)參考修改原呼叫端的物件或陣列實(shí)體內(nèi)容。,引數(shù)串列與引數(shù)傳遞,傳遞陣列有些書籍將這種引數(shù)傳遞視為傳參考呼叫(passbyreference),而本書則將此視為傳參考值呼叫(passbyvalueofreference)。我們透過下面這個(gè)範(fàn)例,觀察傳遞陣列時(shí)的引數(shù)傳遞原理?!居^念範(fàn)例6-10】:利用傳參考值呼叫傳遞陣列。範(fàn)例6-10:ch6_10.java(隨書光碟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樂透號(hào)碼如下.311521323916,傳遞陣列範(fàn)例說明:(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ù)(參考)即可。我們透過下面這個(gè)範(fàn)例來說明:【觀念範(fàn)例6-11】:改寫範(fàn)例6-10,將產(chǎn)生陣列實(shí)體敘述放置於被呼叫函式內(nèi),並回傳該陣列。範(fàn)例6-11:ch6_11.java(隨書光碟myJavach06ch6_11.java),回傳陣列,回傳陣列,執(zhí)行結(jié)果:(同範(fàn)例6-11,但因亂數(shù)緣故,值可能不同)範(fàn)例說明:(1)第20行的回傳值資料型態(tài)為int,代表要回傳一個(gè)整數(shù)一維陣列。(2)從執(zhí)行結(jié)果中,我們可以得知lotto陣列變數(shù)可以存放arr所回傳的陣列參考,使得將之指向同一個(gè)陣列實(shí)體,然而,我們?cè)谇懊嫣徇^,在函式內(nèi)宣告的為區(qū)域變數(shù),而arr也是一個(gè)區(qū)域變數(shù),這意味著當(dāng)函式執(zhí)行完畢時(shí),它將被釋放。但釋放的只是陣列的參考而非陣列實(shí)體,因此在函式內(nèi)產(chǎn)生的陣列實(shí)體仍可以保留,並由第16行取出其元素。,回傳陣列,範(fàn)例說明:(3)您或許會(huì)產(chǎn)生一個(gè)疑問,萬一該函式在宣告時(shí)並不回傳陣列變數(shù),那麼當(dāng)函式執(zhí)行完畢時(shí),陣列參考被釋放了,而陣列實(shí)體並未被釋放,可是又沒有任何參考變數(shù)可以指向它,那麼陣列實(shí)體豈不成為記憶體中的垃圾而浪費(fèi)記憶體空間嗎?沒錯(cuò),但您不用煩惱,因?yàn)镴ava提供了GarbageCollection機(jī)制,對(duì)於沒有被任何變數(shù)參考的陣列或物件實(shí)體,JVM將會(huì)定期地自動(dòng)清除。我們將於後面章節(jié)說明Java的GarbageCollection機(jī)制。(4)本範(fàn)例的記憶體的變化如下:,回傳陣列,回傳陣列,回傳陣列示意圖,函式可以接受呼叫者傳入的引數(shù)值,那麼main函式也可以嗎?答案是肯定的,不過main的引數(shù)串列已經(jīng)在Java中詳細(xì)定義,使用者不得更改。main函式的引數(shù)是用來接收J(rèn)VM的命令參數(shù)例如:我們?cè)贒os命令列中,若輸入javatestThisisabook,則代表要求JVM執(zhí)行test類別,並將Thisisabook等四個(gè)字串傳入test類別的main函式中。,main函式的引數(shù)串列,main函式的引數(shù)被宣告字串陣列Stringargs或Stringargs。我們可以在main()函式中取用這些字串,做其他進(jìn)一步的應(yīng)用。【觀念範(fàn)例6-16】:接收由JVM傳送過來的參數(shù)。範(fàn)例6-16:ch6_16.java(隨書光碟myJavach06ch6_16.java),main函式的引數(shù)串列,執(zhí)行結(jié)果:,main函式的引數(shù)串列,C:javamyJava.ch06.ch6_16Thisisabook本程式共接受到4個(gè)輸入?yún)?shù)args0字串為Thisargs1字串為isargs2字串為aargs3字串為book,範(fàn)例說明:在執(zhí)行結(jié)果中,我們先要求JVM執(zhí)行myJava.ch06Package的ch6_16類別,並傳送This、is、a、book等四個(gè)額外參數(shù)給ch6_16類別的main()函式。【實(shí)用及觀念範(fàn)例6-17】:由於範(fàn)例6-15可以修改為其他球數(shù)的樂透遊戲,因此我們將範(fàn)例6-17改寫為由使用者在輸入命令列參數(shù)時(shí)決定要開出的球數(shù)(球數(shù)當(dāng)然應(yīng)該不可超過48球,因?yàn)楸仨毐A粢粋€(gè)球作為特別號(hào))。範(fàn)例6-17:ch6_17.java(隨書光碟myJavach06ch6_17.java),main函式的引數(shù)串列,main函式的引數(shù)串列,執(zhí)行結(jié)果:,main函式的引數(shù)串列,C:javamyJava.ch06.ch6_1748樂透號(hào)碼如下.363547412393343342510281937482016293294024211715301814421112273649462264531382313844527特別號(hào):41,範(fàn)例說明:(1)我們修改了main()函式,讓使用者可以指定開出的球數(shù)(若使用者輸入超過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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論