溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java數(shù)組知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-05-10 15:46:43 來(lái)源:億速云 閱讀:141 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“Java數(shù)組知識(shí)點(diǎn)有哪些”,在日常操作中,相信很多人在Java數(shù)組知識(shí)點(diǎn)有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java數(shù)組知識(shí)點(diǎn)有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Java數(shù)組知識(shí)點(diǎn)有哪些

數(shù)組的定義

1.概述

  • 假如有一個(gè)班同學(xué)的成績(jī)需要存儲(chǔ),該使用什么方法呢?

  • 像我們之前學(xué)習(xí)的,可以定義多個(gè)變量存儲(chǔ)不同的成績(jī)。但是要有1000多個(gè)學(xué)生,那么到定義1000多個(gè)變量嗎?當(dāng)然不行,這就需要用到我們的數(shù)組了。

2.靜態(tài)初始化數(shù)組

  • 特點(diǎn):定義數(shù)組的時(shí)候直接給數(shù)組賦值,由系統(tǒng)決定數(shù)組長(zhǎng)度

通用格式:

數(shù)據(jù)類型[] 數(shù)組名 = { 元素1,元素2 ,元素3,… };
例如:
int [] array= {1,2,3,4,5};
double[] scores = {88.5, 99.5, 59.5};

3.動(dòng)態(tài)初始化數(shù)組

  • 特點(diǎn):定義數(shù)組時(shí)確了定元素的類型和數(shù)組的長(zhǎng)度,之后存入數(shù)據(jù)

通用格式:

數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長(zhǎng)度];
例如:
int [] array= new int[5];
double[] scores = new double[3];

默認(rèn)值:

數(shù)據(jù)類型具體定義類型默認(rèn)值
基本類型

byte、short、char、int、long

0

float、double

0.0

boolean

false
引用類型

類、接口、數(shù)組、String

null

4.總結(jié)

  • 數(shù)組適合同種類型大量數(shù)據(jù)

  • 靜態(tài)初始化適合知道了元素值

  • 動(dòng)態(tài)初始化適合不清楚存入哪些數(shù)據(jù)

數(shù)組的屬性

1.訪問(wèn)

  • 一般訪問(wèn)數(shù)組的方式為:

數(shù)組名稱[索引]

例題:

//靜態(tài)初始化數(shù)組
int [] array= {1,2,3,4,5};
System.out.println(array[0]);//輸出 1
System.out.println(array[1]);//輸出 2
System.out.println(array[3]);//輸出 4

2.長(zhǎng)度

  • 長(zhǎng)度可以直接調(diào)用length得到數(shù)組的長(zhǎng)度。

例題:

//靜態(tài)初始化數(shù)組
int [] array= {1,2,3,4,5};
System.out.println(array.length);//調(diào)用方法,輸出長(zhǎng)度 5
//最大索引array.length-1

3.遍歷

  • 遍歷就是一個(gè)一個(gè)數(shù)組元素的訪問(wèn),主要應(yīng)用在搜索數(shù)據(jù)統(tǒng)計(jì)......

  • 我們之前學(xué)了第7天:循環(huán)結(jié)構(gòu)、第6天:分支結(jié)構(gòu),下面通過(guò)for循環(huán)遍歷一個(gè)數(shù)組

例題:

  • 給定元素 {10,8,9,4,5,6,8,71,2,3,9,99},用靜態(tài)數(shù)組存儲(chǔ)并輸出數(shù)組中大于5的元素?

編碼實(shí)現(xiàn)

//靜態(tài)初始化數(shù)組
int [] array= {10,8,9,4,5,6,8,71,2,3,9,99};
for(int i=0;i<array.length;i++)
{
	if(array[i]>5)
		System.out.println(array[i]);
}

輸出結(jié)果

10 8 9 6 8 71 9 99

內(nèi)存圖

Java數(shù)組知識(shí)點(diǎn)有哪些

  • Java在程序運(yùn)行時(shí),需要在內(nèi)存中分配空間,對(duì)空間進(jìn)行了不同區(qū)域的劃分。

  • 棧內(nèi)存:存儲(chǔ)局部變量,使用完畢立即消失

  • 堆內(nèi)存:存儲(chǔ)new 出來(lái)的內(nèi)容(對(duì)象、實(shí)體),地址使用完畢在垃圾回收器空閑時(shí)回收

1.單數(shù)組內(nèi)存圖

  • 下面的創(chuàng)建數(shù)組代碼,實(shí)現(xiàn)它的內(nèi)存關(guān)系圖

編碼實(shí)現(xiàn)

//動(dòng)態(tài)初始化數(shù)組
int [] arr=new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//修改值
arr[0]=100;
arr[2]=200;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);

輸出結(jié)果

[I@15db9742
0
0
0
[I@15db9742
100
0
200

原理講解:

Java數(shù)組知識(shí)點(diǎn)有哪些

  • 動(dòng)態(tài)初始化先在堆內(nèi)存生成一個(gè)new 一個(gè)arr 地址值,具體看編譯器的結(jié)果,這里假設(shè)001。由于動(dòng)態(tài)初始化,所以每個(gè)元素都有一個(gè)初始值,具體可以看上面的表。我們輸出元素,先訪問(wèn)數(shù)組名地址,到堆內(nèi)存下標(biāo),再輸出元素值。

  • 修改數(shù)組值,歷程和查看相同,只不過(guò)多了一步修改的過(guò)程,如下圖:

Java數(shù)組知識(shí)點(diǎn)有哪些

2.多數(shù)組內(nèi)存圖

Java數(shù)組知識(shí)點(diǎn)有哪些

  • 多個(gè)數(shù)組和單數(shù)組內(nèi)存使用原理相同,這里我就不過(guò)多講述了。

3.數(shù)組指向相同內(nèi)存

  • 假如我們把兩個(gè)數(shù)組的地址值改為相同,修改后的結(jié)果該是如何,如下面的代碼。

編碼實(shí)現(xiàn)

//動(dòng)態(tài)初始化數(shù)組
int [] arr=new int[3];
arr[0]=100;
arr[1]=200;
arr[2]=300;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);

int [] arr2=arr;
arr2[0]=111;
arr2[1]=222;
arr2[2]=333;

System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr2);
System.out.println(arr2[0]);

輸出結(jié)果

[I@15db9742
100
200
300
[I@15db9742
111
[I@15db9742
111

原理講解:

Java數(shù)組知識(shí)點(diǎn)有哪些

  • 第一個(gè)數(shù)組在堆內(nèi)存的地址為001,第二個(gè)數(shù)組也為001,所以修改第二個(gè)數(shù)組的值,其實(shí)都是同一個(gè)數(shù)組內(nèi)存。第一個(gè)數(shù)組的值也會(huì)隨著改變,結(jié)果如下:

Java數(shù)組知識(shí)點(diǎn)有哪些

常見問(wèn)題

1.索引越界

//靜態(tài)初始化數(shù)組
int [] array= {1,2,3};
System.out.println(array[3]);
  • 上面的代碼運(yùn)行之后,會(huì)出現(xiàn)下面的報(bào)錯(cuò)異常:

  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

  • 解釋:我們靜態(tài)化初始數(shù)組給了3個(gè)數(shù)字,最大索引為2,當(dāng)我們?cè)L問(wèn)3時(shí),就會(huì)報(bào)錯(cuò)

2.空指針異常

//動(dòng)態(tài)初始化數(shù)組
int [] array= new int[3];
array=null;
System.out.println(array[0]);
  • 上面的代碼運(yùn)行之后,會(huì)出現(xiàn)下面的報(bào)錯(cuò)異常:

  • Exception in thread "main" java.lang.NullPointerException

  • 解釋:我們將數(shù)組置為null,導(dǎo)致訪問(wèn)的數(shù)組不指向堆內(nèi)存的數(shù)據(jù)

到此,關(guān)于“Java數(shù)組知識(shí)點(diǎn)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI