(1)數組:存儲同一種數據類型的多個元素的容器(注意和集合的區別 后面的總結之中有)。
(2)特點:每一個元素都有編號,從0開始,最大編號是長度-1。編號的專業叫法:索引。
(3)定義格式
? A:數據類型[] 數組名;
????B:數據類型 數組名[];
(4)數組的初始化
????A:動態初始化
????只給長度,系統給出默認值。
????舉例:int[] arr = new int[3];
????B:靜態初始化
????給出值,系統決定長度。
????舉例:int[] arr = new int[]{1,2,3};
????簡化版:int[] arr = {1,2,3};
(5)Java的內存分配
????A:棧 存儲局部變量。
????B:堆 存儲所有new出來的。
????C:方法區(后面面試題會詳細講,先大概了解)。
????D:本地方法區(系統相關)。
????E:寄存器(CPU使用)。
注意:
????a:局部變量 在方法定義中或者方法聲明上定義的變量。
????b:棧內存和堆內存的區別。
????棧:數據使用完畢,就消失。
????堆:每一個new出來的東西都有地址,每一個變量都有默認值。
????byte,short,int,long 0。
????float,double 0.0。
????char 'u0000'。
????boolean false。
????引用類型 null。
? ? 數據使用完畢后,在垃圾回收器空閑的時候回收。我剛整理了一套2018最新的0基礎入門和進階教程,無私分享,加Java學習q-u-n :六七八,二四一,五六三 即可獲取,內附:開發工具和安裝包,以及系統學習路線圖
(6)數組內存圖:
(7)數組的常見操作
????A:遍歷。
????B:最值。
(8)代碼:
/*
數組:存儲同一種數據類型的多個元素的容器。
定義格式:
A:數據類型[] 數組名;
B:數據類型 數組名[];
舉例:
A:int[] a; 定義一個int類型的數組a變量
B:int a[]; 定義一個int類型的a數組變量
如何對數組進行初始化呢?
A:何謂初始化呢? 就是為數組開辟內存空間,并為每個數組元素賦予值
B:有幾種方式呢?
a:動態初始化 只指定長度,由系統給出初始化值
b:靜態初始化 給出初始化值,由系統決定長度
動態初始化的格式:
數據類型[] 數組名 = new 數據類型[數組長度];
舉例:
int[] arr = new int[3];
如何獲取數組中的元素呢?
通過:
數組名[索引]
索引其實就是每個元素的編號,從0開始,最大索引是數組的長度-1。
*/
publicclassArrayDemo1{
publicstaticvoidmain(String[] args){
//定義一個數組 ? 動態初始化
int[] arr =newint[3];
//定義一個數組 ? 靜態初始化
int[] arr2 = {1,2,3};
/*
左邊:
int:說明數組中的元素的數據類型是int類型
[]:說明這是一個數組
arr:是數組的名稱
右邊:
new:為數組分配內存空間。
int:說明數組中的元素的數據類型是int類型
[]:說明這是一個數組
3:數組長度,其實也就是數組中元素的個數
*/
System.out.println(arr);//[I@c3c749 地址值。
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0
System.out.println("=====================");
System.out.println(arr);//[I@c3c749
System.out.println(arr2[0]);//1
System.out.println(arr2[1]);//2
System.out.println(arr2[2]);//3
}
}
/*
數組遍歷:就是依次輸出數組中的每一個元素。
注意:數組提供了一個屬性length,用于獲取數組的長度。
格式:數組名.length
*/
publicclassArrayDemo2{
publicstaticvoidmain(String[] args){
// 定義數組
int[] arr = {11,22,33,44,55};
// 獲取每一個元素
// 如何獲取呢?我們知道數組名結合編號(索引)就可以找到數據
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println("--------------------");
// 雖然這種做法可以,但是不是我想要的
// 代碼的重復度很高
// 輸出語句,數組名都是相同的,僅僅是索引是變化的
// 用循環搞定索引值
for(intx =0; x <5; x++) {
// x=0,1,2,3,4
System.out.println(arr[x]);
}
System.out.println("--------------------");
//為什么到5呢,我們是數了一下數組的個數
// 繼續看下個數組如何遍歷 ?我們還是數嗎?
int[] arr2 = {1,2,3,4,5,6,7,8,9,10,11,2,2,3,4,5,7,8,
5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,
5,3,5,6,8,7,8,5,3,5,6,8};
// 這個時候,數組就給我們提供了一個屬性:length專門用于獲取數組的長度
// 格式:數組名.length 返回數組的長度
System.out.println(arr.length);//5
System.out.println(arr2.length);//51
System.out.println("--------------------");
// 改進第一個程序
for(intx =0; x < arr.length; x++) {
System.out.println(arr[x]);
}
}
}
/*
數組獲取最值(獲取數組中的最大值最小值)
分析:
A:定義一個數組,并對數組的元素進行靜態初始化。
B:從數組中任意的找一個元素作為參照物(一般取第一個),默認它就是最大值。
C:然后遍歷其他的元素,依次獲取和參照物進行比較,如果大就留下來,如果小,就離開。
D:最后參照物里面保存的就是最大值。
*/
publicclassArrayDemo3{
publicstaticvoidmain(String[] args){
//定義一個數組
int[] arr = {34,98,10,25,67};
//調用方法
intmax = getMax(arr);
System.out.println("max:"+max);
//請獲取數組中的最小值
intmin = getMin(arr);
System.out.println("min:"+min);
}
publicstaticintgetMax(int[] arr){
//從數組中任意的找一個元素作為參照物
intmax = arr[0];
//然后遍歷其他的元素
for(intx=1; x
//依次獲取和參照物進行比較,如果大就留下來,如果小,就離開。
if(arr[x] > max) {
max = arr[x];
}
}
//最后參照物里面保存的就是最大值。
returnmax;
}
publicstaticintgetMin(int[] arr){
//從數組中任意的找一個元素作為參照物
intmin = arr[0];
//然后遍歷其他的元素
for(intx=1; x
//依次獲取和參照物進行比較,如果小就留下來,如果大,就離開。
if(arr[x] < min) {
min = arr[x];
}
}
//最后參照物里面保存的就是最小值。
returnmin;
}
}