(1)數組:存儲同一種資料類型的多個元素的容器。
(2)特點:每一個元素都有編号,從0開始,最大編号是長度-1。
編号的專業叫法:索引
(3)定義格式
A:資料類型[] 數組名;
B:資料類型 數組名[];
推薦是用A方式,B方法就忘了吧。
但是要能看懂
(4)數組的初始化(就是為數組開辟記憶體空間,并為每個數組元素賦予值)
A:動态初始化
隻給長度,系統給出預設值
舉例:int[] arr = new int[3];
B:靜态初始化
給出值,系統決定長度
舉例:int[] arr = new int[]{元素1,元素2,...};
簡化版:int[] arr = {元素1,元素2,...};
(5)Java的記憶體配置設定
A:棧 存儲局部變量
B:堆 存儲所有new出來的(需要有數值,如果沒有,就用預設值(0,null等))
C:方法區(面向對象部分詳細講解)
D:本地方法區(系統相關)
E:寄存器(CPU使用)
注意:
a:局部變量 在方法定義中或者方法聲明上定義的變量。
b:棧記憶體和堆記憶體的差別
棧:資料使用完畢,就消失。
堆:每一個new出來的東西都有位址
每一個變量都有預設值
byte,short,int,long 0
float,double 0.0
char '\u0000'
boolean false
引用類型 null
資料使用完畢後,在垃圾回收器空閑的時候回收。
(6)數組記憶體圖
A:一個數組
B:二個數組
C:三個數組(兩個棧變量指向同一個堆記憶體)
(7)數組的常見操作
A:周遊
方式1:
public static void printArray(int[] arr) {
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
方式2:
public static void printArray(int[] arr) {
System.out.print("[");
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.println(arr[x]+"]");
}else {
System.out.println(arr[x]+", ");
}
}
}
B:最值
最大值:
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
最小值:
public static int getMin(int[] arr) {
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}
C:逆序
方式1:
public static void reverse(int[] arr) {
for(int x=0; x<arr.length/2; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
}
方式2:
public static void reverse(int[] arr) {
for(int start=0,end=arr.length-1; start<=end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
D:查表
public static String getString(String[] strArray,int index) {
return strArray[index];
}
E:基本查找
方式1:
public static int getIndex(int[] arr,int value) {
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
return x;
}
}
return -1;
}
方式2:
public static int getIndex(int[] arr,int value) {
int index = -1;
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}
return index;
}
(8)數組操作的兩個常見小問題:
ArrayIndexOutOfBoundsException:數組索引越界異常
原因:你通路了不存在的索引。
NullPointerException:空指針異常
原因:數組已經不在指向堆記憶體了。而你還用數組名去通路元素。
例:數組記憶體圖解
