一 数组的介绍及定义
1.概述:容器
2.作用:存储数据
3.特点:
a.定长
b.既能存储基本数据类型还能存储引用数据类型
4.定义格式:
动态初始化:数据类型[] 变量名 = new 数据类型[数组的长度]
数据类型 变量名[] = new 数据类型[数组的长度]
静态初始化:数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3}
简化静态初始化:数据类型[] 变量名 = {元素1,元素2,元素3}
5.动态初始化各部分解释:
数据类型:数组只能存储什么类型的元素
[]:代表的数组
变量名:随便
new:创建数组
数据类型:和等号左边的数据类型一致
[数组的长度]:数组最多能存多少个数据(元素)
6.问题:啥时候用动态初始化,啥时候用静态初始化
动态:当定义的时候还不知道存储啥元素,后续才会确定存啥元素
静态:当定义的时候就已经知道存储啥元素了
public class Array01 {
public static void main(String[] args) {
//动态初始化
int[] arr1 = new int[3];
String[] arr2 = new String[4];
//静态初始化
int[] arr3 = {1,2,3,4,5};
String[] arr4 = {"金莲","柳岩","大郎","武二郎"};
}
}
二 数组的操作
1 获取数组的长度
/*
1.数组中有一个属性:length
2.格式:数组名.length */
public class Array02 {
public static void main(String[] args) {
int[] arr = new int[10];
int len = arr.length;
System.out.println(len);
System.out.println("==================");
//静态初始化
String[] arr1 = {"樱桃小丸子","飞天小女警","百变小樱魔术卡","巴啦啦小魔仙","熊出没"};
System.out.println(arr1.length);
}
}
2 索引
1.概述:代表的是元素在数组中存储的位置
2.特点:
从0开始
最大索引为:数组长度-1
索引唯一的
3 获取元素
1.格式: 数组名[索引值]
2.数组定义出来是有默认值的
整数:0
小数:0.0
字符:’\u0000’
布尔:false
引用:null
public class Array03 {
public static void main(String[] args) {
//此处输出的默认值
String[] arr1 = new String[10];
System.out.println(arr1[0]);
int[] arr2 = new int[10];
System.out.println(arr2[0]);
System.out.println("========================");
//静态初始化
String[] arr3 = {"如来佛祖","燃灯佛祖","东来佛祖","斗战胜佛","旃檀功德佛","南无大圣舍利尊王佛"};
//获取索引3上的元素
String element = arr3[3];
System.out.println(element);
//获取索引4上的元素
System.out.println(arr3[4]);
//获取数组中最后一个元素
// String element1 = arr3[5] ;
//获取最大索引
/*int index = arr3.length-1;//5
String element1 = arr3[index] ;*/
String element1 = arr3[arr3.length-1] ;
System.out.println(element1);
}
}
4 存储索引
1.存储元素:数组名[索引值] = 元素值
2.总结:
数组名[索引值]在等号的右边就是获取元素
数组名[索引值]在等号的左边就是存储元素
public class Array04 {
public static void main(String[] args) {
//动态初始化
int[] arr = new int[3];
//存储元素
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
//获取元素
int element1 = arr[0];
int element2 = arr[1];
int element3 = arr[2];
System.out.println(element1);
System.out.println(element2);
System.out.println(element3);
System.out.println("=======================");
int[] arr1 = new int[3];
/*
先看等号右边的,数组名[索引值]在右边,是先获取元素
再看等号左边的,数组名[索引值]在左边,是存储元素
所以下面的代码是先获取元素,存储到对应的索引上
将arr数组0索引上的元素存储到了arr1数组的0索引位置上
*/
arr1[0] = arr[0];
System.out.println(arr1[0]);
}
}
5 遍历数组
1.数组的遍历:循环的将数组中的元素获取出来
2.遍历数组的快捷键:数组名.fori
public class Array05 {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
int element0 = arr[0];
int element1 = arr[1];
int element2 = arr[2];
int element3 = arr[3];
System.out.println(element0);
System.out.println(element1);
System.out.println(element2);
System.out.println(element3);
System.out.println("==============================");
for (int i = 0;i<4;i++){
System.out.println(arr[i]);
}
System.out.println("==============================");
//数组的真正遍历
for (int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
三 操作数组时两个常见的异常问题
1 数组索引越界异常->ArrayIndexOutOfBoundsException
出现原因:操作的索引超出了数组的最大索引
public class Array06 {
public static void main(String[] args) {
//定义一个数组
int[] arr = new int[5];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
arr[3] = 400;
arr[4] = 500;
/*
数组长度为5,最大索引是4,现在我们操作的是5索引
超过了我们数组的索引范围,所以有了异常
ArrayIndexOutOfBoundsException
*/
arr[5] = 600;
}
}
2 空指针异常->NullPointerException
出现的原因:引用为null时还继续使用
public class Array07 {
public static void main(String[] args) {
String[] arr = null;
System.out.println(arr.length);
}
}
四 内存
1 一个数组的内存存储
public class Array09 {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//地址值
arr[2] = 100;
System.out.println(arr[1]);//0
System.out.println(arr[2]);//100
}
}
2 两个数组的内存存储
public class Array10 {
public static void main(String[] args) {
int[] arrA = new int[3];
System.out.println(arrA);//地址值
arrA[2] = 100;
System.out.println(arrA[2]);//100
int[] arrB = new int[3];
System.out.println(arrB);//地址值
arrB[2] = 200;
System.out.println(arrB[2]);//200
}
}
3 两个数组指向同一片内存空间的存储
public class Array10 {
public class Array10 {
public static void main(String[] args) {
int[] arrA = new int[3];
System.out.println(arrA);//地址值
arrA[2] = 100;
System.out.println(arrA[2]);//100
int[] arrB = arrA;
System.out.println(arrB);//地址值
arrB[2] = 200;
System.out.println(arrB[2]);//200
System.out.println(arrA[2]);//200
}
}
}