1 数组简介
什么是数组
在java中储存多个相同类型数据的容器就是数组
数组的定义
public static void main(String[] args) {
//动态初始化:
//我们给出数组长度,系统初始化值
//方法一:数组中存放数据的类型[] 数组名称 = new 数据类型[数组长度]; (推荐写法)
int[] arr1 = new int[5]; // 推荐写法
//方法二:数组中存放数据的类型 数组名称[] = new 数据类型[数据长度];
int arr2[] = new int[5]; // 不推荐这样写,但是不错
//静态初始化
//我们给出值,系统判断长度
//方法一:数组中存放数据的类型[] 数组名称 = new 数据类型[] {数据1, 数据2.....};
int[] arr3 = new int[]{11, 22, 33, 44, 55};
//方法二:数组中存放数据的类型[] 数组名称 = {数据1, 数据2 .....}; (推荐)
int[] arr4 = {11, 22, 33, 44, 55}; //推荐写法
// 基础数据类型,如果只定义不赋值,不能进行使用
int a;
// System.out.println(a); // java: 可能尚未初始化变量a
// 引用型数据,如果没有赋值,会自动赋一个默认值
System.out.println(arr1); // [I@1b6d3586
System.out.println(arr1[0]); // 0
//如果定义一个数组,是int类型, 动态初始化时,每一个元素都会附一个0;
//如果定义一个数组,是double类型, 动态初始化时,每一个元素都会附一个0.0;
double[] arrD = new double[5];
System.out.println(arrD[0]);
//如果定义一个数组,是boolean类型, 动态初始化时,每一个元素都会附一个false;
boolean[] arrB = new boolean[5];
System.out.println(arrB[0]);
//如果定义一个数组,是String类型, 动态初始化时,每一个元素都会附一个null;
String[] arrS = new String[5];
System.out.println(arrS[0]);
}
数组的基本用法
package cn.itcast.demo07_array;
/*
数组中有索引,从左至右, 从0开始依次递增
arr : {11,22,33,44,55}
index: 0 1 2 3 4
使用数组中的元素 arr[index]
修改数组中的元素 arr[index] = value
获取数组中元素的个数, 或者说获取数组的长度:arr.length
*/
public class Demo02 {
public static void main(String[] args) {
//1.定义一个长度为5的int类型的数组.
int[] arr = new int[5];
//2.打印数组中的第3个元素.
System.out.println(arr[2]);
//3.设置数组中的第一个元素值为11.
arr[0] = 11;
//4.获取数组中的第一个元素值, 并将其赋值给变量a, 然后打印.
int a = arr[0];
System.out.println(a);
//5.打印数组的长度. 强调:length中没有括号,证明其实一个属性,不是方法
System.out.println(arr.length);
}
}
数组的内存图解
创建出来的对象(new)都储存在堆区
方法和变量都储存在栈区
new时会先去堆区开辟空间再给默认值
数组在开辟空间时都会先给默认值,如果是静态初始化,会根据长度开辟空间赋默认值,然后再根据索引修改为我们自定义的值
数组的常见异常
数组中常出现的两个小问题:
数组越界ArrayIndexOutOfBoundsException:获取元素所使用的下标,在数组中不存在
空指针异常(不仅是数组,所有的引用类型都可能出现)NullPointerException: 因为应用类型的值为null 所以所在空间内的数据无法提取
数组的常见操作
public class Demo05 {
public static void main(String[] args) {
int[] arr = {5, 15, 2000, 10000, 100, 4000};
// 思路:
// 1.创建一个变量储存颜值最大值
int yanMax = arr[0];
// 2.循环遍历arr 获取每一个元素 与最大值进行比较
for (int i = 1; i < arr.length; i++) {
// 3. 如果比最大值大就将其替换
if (arr[i] > yanMax) {
yanMax = arr[i];
}
// 4. 如果比最大值小,开启下一次循环
}
System.out.println("颜值最大值为:" + yanMax);
}
}
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
//1.新建一个与arr长度相同的空数组
int[] arrNew = new int[arr.length];
//2. 遍历arr数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
/*
i = 0 要给 第 4个元素赋值
i = 1 要给第3个元素赋值
..... 此时被赋值的数组的下标为arr.length - i - 1
*/
//3. 将每一个数组中的元素,按倒序赋值给新数组
arrNew[arr.length - i - 1] = arr[i];
}
System.out.println(arrNew); // [I@1b6d3586
System.out.println(Arrays.toString(arrNew)); // [55, 44, 33, 22, 11]
}