Java編程基礎(chǔ)及應(yīng)用數(shù)組課件_第1頁(yè)
Java編程基礎(chǔ)及應(yīng)用數(shù)組課件_第2頁(yè)
Java編程基礎(chǔ)及應(yīng)用數(shù)組課件_第3頁(yè)
Java編程基礎(chǔ)及應(yīng)用數(shù)組課件_第4頁(yè)
Java編程基礎(chǔ)及應(yīng)用數(shù)組課件_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java編程基礎(chǔ)及應(yīng)用第4章數(shù)組第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.1理解數(shù)組Java的數(shù)組是具有相同的數(shù)據(jù)類型的數(shù)組元素的集合。一旦數(shù)組的初始化完成,數(shù)組在內(nèi)存中所占的空間將被固定下,因此數(shù)組的長(zhǎng)度將不可改變。Java的數(shù)組既可以存儲(chǔ)基本數(shù)據(jù)類型,也可以存儲(chǔ)引用類型的數(shù)據(jù)。值得指出的是,數(shù)組也是一種數(shù)據(jù)類型,它本身是一種引用類型。例如int是一個(gè)基本類型,但int[]就是一種引用類型。第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.2數(shù)組變量的聲明聲明數(shù)組,包括聲明數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類型。Java中支持兩種語(yǔ)法格式來(lái)聲明數(shù)組:

數(shù)組元素類型數(shù)組名[];

數(shù)組元素類型[]數(shù)組名;例如:intiArray[]或者int[]iArray表示int類型數(shù)組,數(shù)組中存放的是int類型的數(shù)據(jù)第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.3數(shù)組的創(chuàng)建和初始化4.3.1創(chuàng)建數(shù)組對(duì)象4.3.2數(shù)組的初始化(1)靜態(tài)初始化(2)動(dòng)態(tài)初始化4.3.1創(chuàng)建數(shù)組對(duì)象

聲明一個(gè)數(shù)組時(shí)僅為數(shù)組指定了數(shù)組名和元素的數(shù)據(jù)類型,并未指定數(shù)組元素的個(gè)數(shù),系統(tǒng)無(wú)法為數(shù)組分配存儲(chǔ)空間。

要讓系統(tǒng)為數(shù)組分配存儲(chǔ)空間,必須指出數(shù)組元素的個(gè)數(shù),該工作在創(chuàng)建數(shù)組對(duì)象時(shí)進(jìn)行。4.3.1創(chuàng)建數(shù)組對(duì)象數(shù)組對(duì)象和其他Java對(duì)象一樣,也用new語(yǔ)句創(chuàng)建;

數(shù)組名=new類型標(biāo)識(shí)符[元素個(gè)數(shù)];元素個(gè)數(shù)通過整型常量來(lái)表示。例如:要表示10個(gè)學(xué)生的成績(jī)(整型),可以先聲明元素的數(shù)據(jù)類型為int的數(shù)組score,再用new運(yùn)算符初始化數(shù)組。 intscore[]; score=newint[10];4.3.2數(shù)組的初始化(1)靜態(tài)初始化靜態(tài)初始化時(shí)由程序員顯式指定每個(gè)數(shù)組元素的初始值,由系統(tǒng)決定數(shù)組的長(zhǎng)度。

靜態(tài)初始化的語(yǔ)法格式如下:

數(shù)組名=new類型標(biāo)識(shí)符[]{數(shù)組元素1,數(shù)組元素2,數(shù)組元素3,...}

例如:對(duì)包含10個(gè)學(xué)生成績(jī)的score數(shù)組進(jìn)行初始化。 Score=newint[]{65,34,78,81,92,89,94,76,67,86};

4.3.2數(shù)組的初始化除此之外,靜態(tài)初始化還有如下簡(jiǎn)化的語(yǔ)法格式:

數(shù)組名={數(shù)組元素1,數(shù)組元素2,數(shù)組元素3,...}在實(shí)際開發(fā)過程中,可能更習(xí)慣將數(shù)組定義和初始化同時(shí)完成,代碼如下: int[]Score={65,34,78,81,92,89,94,76,67,86};4.3.2數(shù)組的初始化(2)動(dòng)態(tài)初始化動(dòng)態(tài)初始化時(shí)由程序指定數(shù)組的長(zhǎng)度,由系統(tǒng)為每個(gè)數(shù)組元素指定初始值。動(dòng)態(tài)初始化的語(yǔ)法格式如下:

數(shù)組名=new類型標(biāo)識(shí)符[元素個(gè)數(shù)];

例如: int[]score=newint[5];4.3.2數(shù)組的初始化執(zhí)行動(dòng)態(tài)初始化時(shí),程序員只需要指定數(shù)組的長(zhǎng)度,即為每個(gè)數(shù)組元素指定所需的內(nèi)存空間,系統(tǒng)將負(fù)責(zé)為這些數(shù)組元素分配初始值。數(shù)據(jù)類型默認(rèn)初值byte0short0int0long0float0.0double0.0char’\u0000’booleanfalse第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.4數(shù)組的使用數(shù)組最常用的用法就是訪問數(shù)組元素,包括對(duì)數(shù)組元素進(jìn)行賦值和取出數(shù)組元素的值。在Java編程語(yǔ)言中,對(duì)數(shù)組元素進(jìn)行訪問通過數(shù)組名和下標(biāo):

數(shù)組名[下標(biāo)]

下標(biāo)值從0開始,到數(shù)組元素個(gè)數(shù)減1,如果數(shù)組元素是5個(gè),下標(biāo)從0到4。

通過調(diào)用數(shù)組的length方法可以獲得一個(gè)數(shù)組的元素個(gè)數(shù)(數(shù)組長(zhǎng)度)。第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.5Foreach循環(huán)Java中引入了一種增強(qiáng)的foreach循環(huán)形式,這種循環(huán)遍歷數(shù)組和集合更加簡(jiǎn)潔。使用foreach循環(huán)遍歷數(shù)組和集合時(shí),無(wú)須獲得數(shù)組和集合的長(zhǎng)度,foreach循環(huán)自動(dòng)遍歷數(shù)組和集合的每個(gè)元素,其定義如下: for(typevariableName:array|collection) { //variableName自動(dòng)迭代訪問每個(gè)元素 }4.5Foreach循環(huán)例4.2foreach循環(huán)來(lái)遍歷數(shù)組元素程序運(yùn)行結(jié)果:6534788192第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)4.6深入理解數(shù)組4.6.1內(nèi)存中的數(shù)組4.6.2基本數(shù)據(jù)類型數(shù)組的初始化4.6.3引用類型數(shù)組的初始化4.6.1內(nèi)存中的數(shù)組數(shù)組引用變量只是一個(gè)引用,這個(gè)引用變量可以指向任何有效的內(nèi)存,只有當(dāng)該引用指向有效內(nèi)存后,才可通過該數(shù)組變量來(lái)進(jìn)行訪問數(shù)組元素。4.6.1內(nèi)存中的數(shù)組實(shí)際的數(shù)組對(duì)象被存儲(chǔ)在堆(heap)內(nèi)存中;如果引用該數(shù)組對(duì)象的數(shù)組引用變量是一個(gè)局部變量,那么它被存儲(chǔ)在棧(stack)內(nèi)存中。數(shù)組在內(nèi)存中的存儲(chǔ)示意圖如圖4-1所示。圖4-1數(shù)組在內(nèi)存中的存儲(chǔ)示意圖4.6.1內(nèi)存中的數(shù)組例4.4 數(shù)組之間直接賦值。

運(yùn)行上面的代碼后,將可以看到先輸出k數(shù)組的長(zhǎng)度為4,然后依次輸出p數(shù)組和k數(shù)組的每個(gè)數(shù)組元素,接著會(huì)輸出k數(shù)組的長(zhǎng)度為3。4.6.1內(nèi)存中的數(shù)組下面結(jié)合示意圖說(shuō)明上面程序的運(yùn)行過程

當(dāng)程序定義并初始化了p,k兩個(gè)數(shù)組后,系統(tǒng)內(nèi)存中實(shí)際上產(chǎn)生了4塊內(nèi)存區(qū),其中棧內(nèi)存中有兩個(gè)引用變量:p和k;堆內(nèi)存中也有兩塊內(nèi)存區(qū),分別用于存儲(chǔ)p和k引用所指向的數(shù)組本身。此時(shí)計(jì)算機(jī)內(nèi)存的存儲(chǔ)示意圖如圖4-2所示。圖4-2定義并初始化p,k數(shù)組后的存儲(chǔ)示意圖4.6.1內(nèi)存中的數(shù)組當(dāng)執(zhí)行上面的粗體字標(biāo)示代碼k=p時(shí),系統(tǒng)會(huì)把p的值賦給k,p和k都是引用類型變量,存儲(chǔ)的是地址。因此把p的值賦給k后,就是讓k指向p所指向的地址。此時(shí)計(jì)算機(jī)內(nèi)存的示意圖如圖4-3所示。圖4-3k引用指向p引用所指向數(shù)組后的存儲(chǔ)示意圖4.6.2基本數(shù)據(jù)類型數(shù)組的初始化對(duì)于基本類型數(shù)組而言,數(shù)組元素的值直接存儲(chǔ)在對(duì)應(yīng)的數(shù)組元素中,因此,初始化數(shù)組時(shí),先為該數(shù)組分配內(nèi)存空間,然后直接將數(shù)組元素的值存入對(duì)應(yīng)數(shù)組元素中。4.6.2基本數(shù)據(jù)類型數(shù)組的初始化例4.5基本數(shù)據(jù)類型數(shù)組初始化4.6.2基本數(shù)據(jù)類型數(shù)組的初始化下面將結(jié)合示意圖詳細(xì)介紹這段代碼的執(zhí)行過程。

執(zhí)行第一行代碼int[]Array;時(shí),僅定義一個(gè)數(shù)組變量,此時(shí)內(nèi)存中的存儲(chǔ)示意圖如圖4-4所示。圖4-4定義Array數(shù)組變量后的存儲(chǔ)示意圖4.6.2基本數(shù)據(jù)類型數(shù)組的初始化

當(dāng)執(zhí)行Array=newint[5];動(dòng)態(tài)初始化后,系統(tǒng)將負(fù)責(zé)為該數(shù)組分配內(nèi)存空間,并分配默認(rèn)的初始值;所有數(shù)組元素都被賦值為0,此時(shí)內(nèi)存中的存儲(chǔ)示意圖如圖4-5所示。圖4-5動(dòng)態(tài)初始化Array數(shù)組后的存儲(chǔ)示意圖

當(dāng)循環(huán)為該數(shù)組的每個(gè)數(shù)組元素依次賦值后,此時(shí)每個(gè)數(shù)組元素的值都變成程序顯式指定的值。顯式指定每個(gè)數(shù)組元素值后的存儲(chǔ)示意圖如圖4-6所示。4.6.2基本數(shù)據(jù)類型數(shù)組的初始化圖4-6顯式為每個(gè)數(shù)組元素賦值后的存儲(chǔ)示意圖引用類型數(shù)組的數(shù)組元素是引用,因此情況變得更加復(fù)雜。每個(gè)數(shù)組元素里存儲(chǔ)的還是引用,它指向另一塊內(nèi)存,這塊內(nèi)存里存儲(chǔ)了有效數(shù)據(jù)。為了更好地說(shuō)明引用類型數(shù)組的運(yùn)行過程,下面先定義一個(gè)Person類。4.6.3引用類型數(shù)組的初始化下面程序定義一個(gè)Person[]數(shù)組,接著動(dòng)態(tài)初始化這個(gè)Person[]數(shù)組,并為這個(gè)數(shù)組的每個(gè)數(shù)組元素指定值。4.6.3引用類型數(shù)組的初始化下面將結(jié)合示意圖詳細(xì)介紹這段代碼的執(zhí)行過程。

執(zhí)行Person[]students;代碼時(shí),這行代碼僅僅在棧內(nèi)存中定義了一個(gè)引用變量,也就是一個(gè)指針,這個(gè)指針并未指向任何有效的內(nèi)存區(qū)。此時(shí)內(nèi)存中存儲(chǔ)示意圖如圖4-7所示。4.6.3引用類型數(shù)組的初始化圖4-7定義一個(gè)students數(shù)組變量后的存儲(chǔ)示意圖

執(zhí)行初始化,程序?qū)tudents數(shù)組執(zhí)行動(dòng)態(tài)初始化,系統(tǒng)為數(shù)組元素分配默認(rèn)的初始值:null,即每個(gè)數(shù)組元素的值都是null。執(zhí)行動(dòng)態(tài)初始化后的存儲(chǔ)示意圖如圖4-8所示。4.6.3引用類型數(shù)組的初始化圖4-8動(dòng)態(tài)初始化students數(shù)組后的存儲(chǔ)示意圖

接著的代碼定義了wang和liao兩個(gè)Person實(shí)例,定義這兩個(gè)實(shí)例實(shí)際上分配了4塊內(nèi)存,在棧內(nèi)存儲(chǔ)了wang和liao兩個(gè)引用變量,還在堆內(nèi)存中存儲(chǔ)了兩個(gè)Person實(shí)例。此時(shí)的內(nèi)存存儲(chǔ)示意圖如圖4-9所示。4.6.3引用類型數(shù)組的初始化圖4-9創(chuàng)建兩個(gè)實(shí)例后的存儲(chǔ)示意圖然后,程序依次將wang賦給students數(shù)組的第一個(gè)元素,把liao賦給students數(shù)組的第二個(gè)元素,students數(shù)組的兩個(gè)數(shù)組元素將會(huì)指向有效的內(nèi)存區(qū)。此時(shí)的內(nèi)存存儲(chǔ)示意圖如圖4-10所示。4.6.3引用類型數(shù)組的初始化圖4-10為數(shù)組元素賦值后的存儲(chǔ)示意圖從圖4-10中可以看出,此時(shí)wang和students[0]指向同一內(nèi)存區(qū),而且它們都是引用類型變量,因此通過wang和students[0]來(lái)訪問Person實(shí)例的字段和方法的效果完全一樣,不論修改students[0]所指向的Person實(shí)例的字段,還是修改wang變量所指向的Person實(shí)例的字段,所修改的其實(shí)是同一個(gè)內(nèi)存區(qū),所以必然互相影響。4.6.3引用類型數(shù)組的初始化第四章數(shù)組4.1理解數(shù)組

4.2數(shù)組變量的聲明4.3數(shù)組的創(chuàng)建和初始化4.4數(shù)組的使用4.5Foreach循環(huán)4.6深入理解數(shù)組4.7多維數(shù)組4.8本章小結(jié)Java語(yǔ)言里提供了支持多維數(shù)組的語(yǔ)法。Java語(yǔ)言里的數(shù)組類型是引用類型,因此,數(shù)組變量其實(shí)就是一個(gè)引用,這個(gè)引用指向真實(shí)的數(shù)組內(nèi)存。數(shù)組元素的類型也可以是引用,如果數(shù)組元素的引用再次指向真實(shí)的數(shù)組內(nèi)存,這種情形看上去很像多維數(shù)組。前面定義一維數(shù)組的語(yǔ)法:type[]arrName;,這是典型的一維數(shù)組的定義語(yǔ)法,其中type是數(shù)組元素的類型。如果希望數(shù)組元素也是一種引用,而且是指向int數(shù)組的引用,則可以把type具體成int[],那么上面定義數(shù)組的語(yǔ)法就是int[][]arrName。4.7多維數(shù)組把int類型擴(kuò)大到Java的所有類型,則出現(xiàn)了定義二維數(shù)組的語(yǔ)法: type[][]arrName;接著對(duì)二維數(shù)組進(jìn)行初始化,同樣可以把這個(gè)數(shù)組當(dāng)成一維數(shù)組來(lái)初始化,其元素的類型是type[]類型,則可以采用如下語(yǔ)法進(jìn)行初始化: arrName=newtype[length][];

上面的初始化語(yǔ)法相當(dāng)于初始化了一個(gè)一維數(shù)組,這個(gè)一維數(shù)組的長(zhǎng)度是length。同樣,因?yàn)檫@個(gè)一維數(shù)組的數(shù)組元素是引用類型的,所以系統(tǒng)為每個(gè)數(shù)組元素都分配初始值:null。4.7多維數(shù)組使用newtype[length][]初始化這個(gè)數(shù)組后,相當(dāng)于定義了length個(gè)type[]類型的變量,當(dāng)然,這些type[]類型的變量都是數(shù)組類型,因此必須再次初始化這些數(shù)組。例4.7示范了如何把二維數(shù)組當(dāng)成一維數(shù)組處理。4.7多維數(shù)組下面結(jié)合示意圖來(lái)說(shuō)明這個(gè)程序的執(zhí)行過程。

程序的第一行int[][]a;,將在棧內(nèi)存中定義一個(gè)引用變量,這個(gè)變量并未指向任何有效的內(nèi)存空間,此時(shí)的堆內(nèi)存中還未為這行代碼分配任何存儲(chǔ)區(qū)。4.7多維數(shù)組4.7多維數(shù)組

程序?qū)數(shù)組執(zhí)行初始化:a=newint[4][];,這行代碼讓a變量指向一塊長(zhǎng)度為4的數(shù)組內(nèi)存,這個(gè)長(zhǎng)度為4的數(shù)組里每個(gè)數(shù)組元素都是引用類型,系統(tǒng)為這些數(shù)組元素分配默認(rèn)的初始值:null。此時(shí)a數(shù)組在內(nèi)存中的存儲(chǔ)示意圖如圖4-11所示。圖4-11二維數(shù)組當(dāng)成一維數(shù)組初始化的存儲(chǔ)示意圖接下來(lái)的程序?qū)[0]元素執(zhí)行初始化,即讓圖4-11右邊堆內(nèi)存中的第一個(gè)元素指向有效的數(shù)組內(nèi)存,指向一個(gè)長(zhǎng)度為2的int數(shù)組。因?yàn)槌绦虿捎脛?dòng)態(tài)初始化a[0]數(shù)組,因此系統(tǒng)將為a[0]所引用數(shù)組的每個(gè)元素分配默認(rèn)的初始值:0,然后程序顯式為a[0]數(shù)組的第二個(gè)元素賦值為6。此時(shí)在內(nèi)存中的存儲(chǔ)示意圖如圖4-12所示。4.7多維數(shù)組圖4

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論