Java數(shù)組
1.概念-什么是數(shù)組
數(shù)組可以理解成在計算機中的多個連續(xù)的存儲空間驯嘱,里面可以按順序存放多個類型相同的數(shù)據(jù)。
2.語法及使用
2.1數(shù)組的使用:
數(shù)組連續(xù)存儲空間
2.2獲得數(shù)組的基本語法:
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長度];
3.數(shù)組的使用
數(shù)組也是一個[數(shù)據(jù)類型]
4.JVM堆棧
4.1.堆:
可以理解為凡是new 出來的東西都放在這里面肝断,堆內(nèi)存可以被虛擬機動態(tài)的分配內(nèi)存大小,無需事先告訴編譯器的數(shù)據(jù)的大小、生命周期等相關(guān)信息
4.2棧:
主要存放一些變量容器名 (例如局部變量名胸懈,還可以存放局部變量 基本類型 數(shù)據(jù)值)
5.數(shù)組的特點
1.數(shù)據(jù)類型限定了數(shù)組可以存放的數(shù)據(jù)類型
2.一個數(shù)組可以存儲多個元素
3.一旦數(shù)組對象被創(chuàng)建好蛉腌,那么其長度就固定不變了
4.動態(tài)創(chuàng)建好數(shù)組之后,會自動分配默認值晾浴,和數(shù)組中的元素類型有關(guān)(類似之前成員變量的默認值)
6.常見的錯誤
//1.錯誤索引越界
//System.out.println(arr[arr.length]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
//遍歷
for(int i = 0;i<arr.length;i++){
System.out.println("索引位置:"+i);
System.out.println(arr[i]);
}
//2.空指針異常
int[] ar = null;//arr根本就沒有指向一個數(shù)組【數(shù)組不存在】
//編譯不報錯:只看類型不看值星岗,不會看到底有沒有數(shù)組,但是運行一定會看數(shù)組在不在【看是否有值】
System.out.println(ar.length);
String str = null;
}
//3)如果有返回值首有,不知道return寫在哪里【數(shù)據(jù)類型對應(yīng).....】
static int[] getArr(){
return new int[10];
}
7.數(shù)組的簡寫
聲明的同時賦值//接下來學(xué)習(xí)中最常用
數(shù)據(jù)類型[]? 數(shù)組變量名? = {多個以英文逗號分隔的數(shù)據(jù)};
8.數(shù)組的遍歷
class _LxBl {
//數(shù)組的遍歷(難)
public static void main(String[] args){
//利用簡單的方法定義一個數(shù)組
int[] arr ={1,2,3,4,5,6};
bianLi(arr);
}
/*思路:
首先想辦法將數(shù)組中的數(shù)一對一的取出來
由于每次只能取出一個數(shù)燕垃,所以考慮用循環(huán),最好將數(shù)組索引設(shè)為變量
*/
//不設(shè)置返回值井联,直接在方法中打印
static void bianLi(int[] a){
//為了美觀在打印前加一個括號
String num = "[";
//利用for循環(huán)卜壕,將變量值設(shè)定為數(shù)組長度減一,由于循環(huán)的屬性
for (int i = 0; i < a.length-1;i++ ){
num = num+a[i]+",";
}
System.out.print(num);
System.out.print(a[a.length-1]+"]");
}
}
2.參數(shù)傳遞
要理解,參數(shù)傳遞轮蜕,基本數(shù)據(jù)類型不能被改變,因為在調(diào)用方法時只是復(fù)制了一份變量蝗锥,而不是真正的改變了變量;
而數(shù)組能改變终议,是因為數(shù)組作為引用數(shù)據(jù)類型汇竭,儲存的是引用地址,在參數(shù)改變的時候穴张,地址值雖然沒有改變细燎,但是存儲的值改變了;
class _11Test {
/*
1.方法參數(shù)傳遞
值傳遞
值引用
*/
public static void main(String[] args){
int a = 10;//基本數(shù)據(jù)類型
int[] arr = {66};//引用數(shù)據(jù)類型
System.out.println(a);//10
System.out.println(arr[0]);//66
//-------------------------------------
changeData(a);
changeData(arr);
System.out.println(a);
System.out.println(arr[0]);//99
}
static void changeData(int a){
System.out.println("int--->"+a);//10
a = 55;
}
static void changeData(int[] a){//傳的是什么璧瞬?
System.out.println("int[]--->"+a);//[I@15db9742
a[0] = 99;
}
}