資源描述:
《[工學(xué)]java新增講義》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、附錄AJDK新增特性第一章增強For循環(huán)1.1For-Each形式從J2SE5開始,定義了第二種for形式,即“for-each”風(fēng)格的循環(huán)。for-each風(fēng)格的循環(huán)用在一個對象集合中(如數(shù)組),以嚴格的連續(xù)方式,從開始到結(jié)束進行循環(huán)。與某些使用for-each關(guān)鍵詞來實現(xiàn)for-each循環(huán)的語言(如C#)不同,Java是通過增強for語句來實現(xiàn)for-each功能。該方法的優(yōu)勢在于無需新的關(guān)鍵詞,并且無需拆開先前的代碼。for-each風(fēng)格的for循環(huán)也稱為增強的(enhanced)for循環(huán)。for-each版本的for循環(huán)的一般形式如下:for(typei
2、tr-var:collection)statement-block其中type指定了類型,itr-var指定了迭代變量(iterationvariable)名,該變量將接收集合中的元素,方式是從集合的開始到結(jié)束一次一個。所要循環(huán)的集合由collection所指定。For可使用的集合類型很多,本章只使用了數(shù)組類型(后面將討論for可使用的其他集合類型)。隨著循環(huán)的迭代,會取出集合中的下一個元素并存儲在itr-var中。該循環(huán)會一直重復(fù)下去,直到集合中的所有元素都已取出為止。由于迭代變量從集合中接收值,所以type必須與集合中存儲的元素類型相同(或相互兼容)。為此,在數(shù)
3、組上進行迭代時,type必須與數(shù)組的基本類型相兼容。要理解使用for-each循環(huán)的原因,請考慮一下for-each循環(huán)用于什么地方替換for循環(huán)類型。下面的程序片段是用傳統(tǒng)的for循環(huán)來計算數(shù)組中各個值的總和:intnums[]={1,2,3,4,5,6,7,8,9,10};intsum=0;for(inti=0;i<10;i++)sum+=nums[i];要計算總和,需要從頭到尾按順序讀取nums中的每個元素。因此就要按嚴格的先后順序讀取整個數(shù)組,這通過指定nums數(shù)組的下標(biāo)i(循環(huán)控制變量)來完成。另外還必須明確地指定循環(huán)控制變量的開始值和結(jié)束值及其增量。fo
4、r-each風(fēng)格循環(huán)中的for會使前述的循環(huán)自動化。它無需建立循環(huán)計數(shù)器、無需指定開始和結(jié)束值,并且無需手工地為數(shù)組指定下標(biāo)。相反,它自動在整個數(shù)組中循環(huán),從開始到結(jié)束來每次獲得一個元素。例如,下面是用for-each版本的for重寫前述程序片斷后的程序:intnums[]={1,2,3,4,5,6,7,8,9,10};intsum=0;for(intx:nums)sum+=x;每次循環(huán)時,會給x自動賦予一個與nums中下一個元素相等的值。因此,在首次迭代時,x包含1;第二次迭代時,x包含2,等等。這樣做不僅從語法上很流暢,而且還可避免出現(xiàn)越界錯誤。下面是演示上述f
5、or-each版本的for的完整程序。//Useafor-eachstyleforloop.classForEach{publicstaticvoidmain(Stringargs[]){intnums[]={1,2,3,4,5,6,7,8,9,10};intsum=0;//Usefor-eachstylefortodisplayandsumthevaluesfor(intx:nums){System.out.println(“Valueis:“+x);sum+=x;}System.out.println(“Summation:“+sum);}}該程序的輸出如下:V
6、alueis:1Valueis:2Valueis:3Valueis:4Valueis:5Valueis:6Valueis:7Valueis:8Valueis:9Valueis:10Summation:55可以看出,for-each風(fēng)格中的for會自動按從最低下標(biāo)到最高下標(biāo)的順序在數(shù)組中循環(huán)。雖然for-each風(fēng)格的for會進行循環(huán)迭代直至檢查完數(shù)組中的所有元素,但也可以使用break語句提前終止該循環(huán)。例如,下面程序僅計算nums的前5個元素的總和://Usebreakwithafor-eachstylefor.classForEach2{publicstatic
7、voidmain(Stringargs[]{intsum=0;intnums[]={1,2,3,4,5,6,7,8,9,10};//usefortodisplayandsumthevaluesfor(intx:nums){System.out.println(“Valueis:“+x);sum+=x;if(x==5)break;//stoptheloopwhen5isobtained}System.out.println(“Summationoffirst5elements:“+sum);}}下面是該程序的輸出:Valueis:1Valueis:2Valueis