Java數組詳解(Java基礎)
本章小結了Java數組的基本語法,分享給新學習的小伙伴,分享獲取新知大家一起進步。
文章目錄
一.引言
二.數組
三.數組的使用
四.數組的內存分配
一.引言
回顧數據類型:
(1)基本類型 byte short int long float double char boolean
(2)引用類型 類 數組 接口 枚舉 注解
變量:內存中的一塊存儲空間, 存儲的就是常量。
特點:一個變量只能存儲一個數據,不能存儲多個。
需求:統(tǒng)計把一個班級的所有學生30個人java成績?
解決1:使用變量存儲,需要聲明30個變量: int java1=90; int java2=80;
解決2:使用數組
二.數組
什么是數組 ?
數據的組合,不止一個數據,包含多個數據。數組就是一個變量。
數組聲明和初始化聲明:
方式一:數據類型 [] 數組名
方式二:數據類型 數組名[]
初始化:
Java中的數組必須先初始化,然后才可以使用,所謂初始化,就是為數組中的數組元素分配內存空間,并為每個數組 元素賦初始值。
區(qū)分靜態(tài)初始化和動態(tài)初始化
靜態(tài)初始化
初始化時由程序員指定每個數組元素的初始值,由系統(tǒng)計算數組長度。
語法:數組元素類型[] 數組名 = new 數組元素類型[]{元素0,元素1, };
1
可簡寫為:數組元素類型[] 數組名 = {元素0,元素1, };
1
說明:任何一個變量都得有自己的數據類型,這里的arr表示數組變量名稱,int表示數組中元素的類型,int[]才是 數組類型
注意:簡寫靜態(tài)初始化只能一條語句完成,不能分割成兩條語句。
/* 靜態(tài)初始化:由我們指定元素的初始值,由系統(tǒng)計算長度或者元素的個數 */ int[] arr = new int[]{1,56,76,87}; int[] arr1 = {1,56,76,87}; String[] arr2 = new String[]{"434","gfg","gjf545"}; String[] arr3 = {"434","gfg","gjf545"}; //Scanner[] arr4 = char[] arr5 = new char[]{'2','g','*'}; char[] arr5 ={'2','g','*'};
1
2
3
4
5
6
7
8
9
10
11
12
13
動態(tài)初始化
初始化時程序員只指定數組長度,由系統(tǒng)為數組元素分配初始值
語法:元素類型[] 數組名 = new 元素類型[元素個數或者數組長度];
1
系統(tǒng)對初始值分配規(guī)則如下:
a.整數型為0
b.浮點型為0.0
c.字符型為‘\u0000’(不同的系統(tǒng)平臺顯示結果不同)
d.布爾類型為false
e.引用類型為null
/* 動態(tài)初始化:初始化時由程序員指定數組的長度,系統(tǒng)負責分配元素的初始值 */ int[] array1 = new int[5];//0 String[] array2 = new String[3];//null char[] array3 = new char[10];//\u0000
1
2
3
4
5
6
7
注意:a.在初始化數組時,不要靜態(tài)初始化和動態(tài)初始化同時使用,也就是說,不要在進行數組初始化時,既指定數組 的長度,也為每個數組元素分配初始值。
三.數組的使用
(1)通過下標訪問指定元素
注意:
①Java語言的數組索引(下標、角標)是從0開始的,數組的下標的最大值長度-1
②不要超出索引的范圍,如果超出范圍出現異常 java.lang.ArrayIndexOutOfBoundsException(索引越界異常)
//使用靜態(tài)初始化的方式定義一個數組 //數組中可以存放重復數據 int[] arr1 = new int[]{2,65,76,83,32,5,5}; //1.訪問數組中的元素 //格式:數組名稱[下標] 表示獲取指定下標所對應的值 //需求:獲取下標3對應的元素 int num1 = arr1[3]; System.out.println(num1);//83 System.out.println(arr1[3]);//83
1
2
3
4
5
6
7
8
9
10
(2)2.3.2獲取數組元素的個數
在Java中,所有數組都提供了一個length屬性,通過這個屬性可以訪問到數組的長度或者數組中元素的個數
//2.獲取數組中的元素個數或者數組的長度 //格式:數組名稱.length; int len = arr1.length; System.out.println("數組arr1的長度為:" + len);
1
2
3
(3)修改數組元素的值
//3.修改數組元素的值int num2 = arr1[6]; System.out.println(num2);// //格式:數組名稱[下標] = 被修改之后的值 //注意:不管是靜態(tài)初始化還是動態(tài)初始化,都可以采用這種方式修改元素的值arr1[6] = 100; System.out.println(arr1[6]);//100
1
2
3
4
5
(4)遍歷數組
依次訪問數組中的每一個元素,獲取每個下標對應的元素值
方式一:簡單for循環(huán)
方式二:增強for循環(huán)(foreach)無法使用下標
public class Demo { public static void main(String[] args) { int[] arr1 = new int[]{2,65,76,83,32,5,5}; //4.遍歷數組 int n0 = arr1[0]; int n1 = arr1[1]; int n2 = arr1[2]; int n3 = arr1[3]; int n4 = arr1[4]; int n5 = arr1[5]; int n6 = arr1[6]; //1>簡單for循環(huán) //i表示下標,0~arr1.length for(int i = 0;i < arr1.length;i++) { int n = arr1[i]; System.out.println(n); } /* 2>增強for循環(huán)【foreach】JDK1.5之后新增的 優(yōu)點:用于遍歷數組和集合,無需通過數組下標,就可以直接訪問數組或者集合中的元素 語法: for(元素數據類型 變量名:數組名稱) { System.out.println(變量名); } */ //底層工作原理:根據下標獲取數組元素 for(int num : arr1) { System.out.println("增強for循環(huán)的結果:" + num); } /* 兩種遍歷方式的選擇:不需要知道下標,只需要獲取元素值,則采用增強for循環(huán) */ //需求:打印下標為偶數的元素值【只能采用簡單for循環(huán)】 for(int i = 0;i < arr1.length;i++) { if(i % 2 == 0) { int n = arr1[i]; System.out.println(n); } } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
案例練習:鍵盤錄入學生java成績,并把成績保存在數組中,然后計算總分和平均分?
public class Demo { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("請輸入班級人數"); int count=input.nextInt(); int[] score=new int[count]; for (int i = 0; i < score.length; i++) { System.out.println("請輸入第"+(i+1)+"個人的java成績"); score[i]=input.nextInt(); } System.out.println(" "); int sum=0;//總分 double avg=0;//平均分 for (int n : score) { sum=sum+n; } avg=(double)sum/count; System.out.println("總分是:"+sum); System.out.println("平均分是:"+avg); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
四.數組的內存分配
java內存:
棧:存儲基本類型數據和引用類型的地址,特點:先進后出,一般空間比較小,存取速度較快
堆:存儲引用類型數據, 特點:空間比較大,存儲速度相對較慢
方法區(qū): 存儲字符串常量池,靜態(tài)數據,代碼和類的元數據
數組屬于引用類型,數組引用變量只是一個引用,這個引用變量可以指向任何有效的內存空間,只有當這個引用 指向有效的空間時,才可以通過引用去操作真正數組中的元素。
結論:數組的引用變量存儲在棧空間中,而真正的數組數據存儲在堆空間在中。
public class Demo { public static void main(String[] args) { //圖1 使用靜態(tài)初始化的方式初始化一個數組a int[] a = {5,7,20}; System.out.println("a的長度為:" + a.length);//3 int num =8; System.out.println("num:"+num); //圖2 int[] b=new int[4]; System.out.println("b的長度是:"+b.length); b=a; System.out.println("b的長度是:"+b.length); System.out.println(b); //輸出的是地址值 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
拓展:使用數組時常見的異常
1>數組越界異常:ArrayIndexOutofBoundsException
出現的時機:當使用了不存在的下標時,則會出現這個錯誤0~length - 1
2>空指針異常:NullPointerException
出現的時機:當數組的引用變量賦值為null,還在后面的代碼中使用這個引用
The best investment is in yourself
2020.04.16 記錄辰兮的第56篇博客
Java 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。