假定我們現(xiàn)在想寫一個(gè)方法,同時(shí)不希望它僅僅返回一樣?xùn)|西,而是想返回一系列東西。此時(shí),象C和C++這樣的語(yǔ)言會(huì)使問(wèn)題復(fù)雜化,因?yàn)槲覀儾荒芊祷匾粋€(gè)數(shù)組,只能返回指向數(shù)組的一個(gè)指針。這樣就非常麻煩,因?yàn)楹茈y控制數(shù)組的“存在時(shí)間”,它很容易造成內(nèi)存“漏洞”的出現(xiàn)。
Java采用的是類似的方法,但我們能“返回一個(gè)數(shù)組”。當(dāng)然,此時(shí)返回的實(shí)際仍是指向數(shù)組的指針。但在Java里,我們永遠(yuǎn)不必?fù)?dān)心那個(gè)數(shù)組的是否可用——只要需要,它就會(huì)自動(dòng)存在。而且垃圾收集器會(huì)在我們完成后自動(dòng)將其清除。
flavorSet()方法創(chuàng)建了一個(gè)名為results的String數(shù)組。該數(shù)組的大小為n——具體數(shù)值取決于我們傳遞給方法的自變量。隨后,它從數(shù)組flav里隨機(jī)挑選一些“香料”(Flavor),并將它們置入results里,并最終返回results。返回?cái)?shù)組與返回其他任何對(duì)象沒(méi)什么區(qū)別——最終返回的都是一個(gè)句柄。至于數(shù)組到底是在flavorSet()里創(chuàng)建的,還是在其他什么地方創(chuàng)建的,這個(gè)問(wèn)題并不重要,因?yàn)榉凑祷氐膬H是一個(gè)句柄。一旦我們的操作完成,垃圾收集器會(huì)自動(dòng)關(guān)照數(shù)組的清除工作。而且只要我們需要數(shù)組,它就會(huì)乖乖地聽候調(diào)遣。
另一方面,注意當(dāng)flavorSet()隨機(jī)挑選香料的時(shí)候,它需要保證以前出現(xiàn)過(guò)的一次隨機(jī)選擇不會(huì)再次出現(xiàn)。為達(dá)到這個(gè)目的,它使用了一個(gè)無(wú)限while循環(huán),不斷地作出隨機(jī)選擇,直到發(fā)現(xiàn)未在picks數(shù)組里出現(xiàn)過(guò)的一個(gè)元素為止(當(dāng)然,也可以進(jìn)行字串比較,檢查隨機(jī)選擇是否在results數(shù)組里出現(xiàn)過(guò),但字串比較的效率比較低)。若成功,就添加這個(gè)元素,并中斷循環(huán)(break),再查找下一個(gè)(i值會(huì)遞增)。但假若t是一個(gè)已在picks里出現(xiàn)過(guò)的數(shù)組,就用標(biāo)簽式的continue往回跳兩級(jí),強(qiáng)制選擇一個(gè)新t。用一個(gè)調(diào)試程序可以很清楚地看到這個(gè)過(guò)程。
main()能顯示出20個(gè)完整的香料集合,所以我們看到flavorSet()每次都用一個(gè)隨機(jī)順序選擇香料。為體會(huì)這一點(diǎn),最簡(jiǎn)單的方法就是將輸出重導(dǎo)向進(jìn)入一個(gè)文件,然后直接觀看這個(gè)文件的內(nèi)容。
以上就是長(zhǎng)沙一度軟件培訓(xùn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)教程:Java返回?cái)?shù)組”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java基礎(chǔ)教程