数组

一、数组定义格式:

1)数组概述:一次性声明大量的用于存储数据的变量;这些要存储的数据通常都是同类型数据。例如:全班同学的考试成绩。

2)数组:是一种用于存储多个相同类型数据的存储模型

3)定义格式1:

数据类型[] 变量名

范例:

int[] a ; 
//含义:定义了一个int类型的数组,数组名是a;

4)定义格式2:

数据类型 变量名[]

范例:

int a[];
//含义:定义了一个int类型的变量,变量名是a数组;

二、数组动态初始化

1)数组初始化概述:Java中的数组必须先初始化,然后才能使用;初始化就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

2)数组初始化方式:动态初始化、静态初始化

3)动态初始化:指初始化时只指定数组长度,有系统为数组分配初始值

4)动态初始化格式:

数据类型[] 变量名 = new 数据类型[数组长度];

5)动态初始化代码演示:

public class Array{
public static void main(String[]args){
	int[] arr = new int[3];
	}
}
/*
	左边:
	int:说明数组中的元素是int类型;
	[]:说明这是一个数组
	arr:数组的名称
右边:
	new:为数组申请内存空间
	int:说明数组中的元素类型是int类型
	[] :说明这是一个数组
	3:数组长度,即数组中的元素个数
*/

三、数组元素访问

1)数组变量的访问方式: 数组名

2)数组内部保存的数据的访问方式: 数组名[索引] //编号从0开始

3)索引:索引是数组中数据的编号方式,作用就是用于访问数组中的数据,数组名[索引]等同于变量名,是一种特殊的变量名;索引从0开始,是连续的,逐一增加,每次加一

4)例子: System.out.println(arr[0]); //访问数组的第一个元素

四、内存分配

1)Java中内存分配:Java程序在运行时,需要在内存中分配空间,为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式

2)数组在初始化时,会为存储空间添加默认值:整数默认值是0;浮点数默认值是0.0;布尔值的默认值是false;字符默认值是空字符;引用数据类型的默认值是null

3)内存索引示意图:
在这里插入图片描述

new的时候分配蓝色区域,执行输出语句时,利用红色区域的数组名指向的内存地址寻找到蓝色区域中的红色表。

4)上图中,红色区域为栈内存、蓝色区域为堆内存

5)栈内存:存储局部变量,即定义在方法中的变量,例如arr,使用完毕后立即消失

6)堆内存:存储new出来的内容(称为实体、对象)、数组在初始化时,会为存储空间添加默认值 ,每一个new出来的东西都有一个地址值,使用完毕后,会在垃圾回收器空闲时被回收。

7)多个数组的内存图
在这里插入图片描述

8)多个数组指向相同的内存图
在这里插入图片描述

把第一个数组的地址值赋给了第一个数组,也就是指向相同的内存

int[] arr2 = arr;

当两个数组指向相同时,其中一个数组修改堆内存的数据时,另一个数组访问时,也会取到修改后的堆内存的值

五、数组静态初始化

1)静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度

2)格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3.....}

范例:

int[] arr = new int[]{1,2,3};

3)简化格式:

int[] 变量名 = {数据1,数据2,数据3......}

范例:

int[] arr = {1,2,3};

六、数组操作的两个常见小问题

1)索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题(ArrayIndexOutOfBoundsException)

2)空指针异常:访问了数组中不存在的索引对应的元素,造成索引越界问题(NullPointerException)

范例:

 int[] arr = new int[3];
System.out.println(arr[2]);
//把null赋值给数组
arr = null;
//输出元素
System.out.println(arr[0]);

七、数组常见操作

1)遍历:
/

/利用for循环实现获取数据,索引0-4
for(int i = 0 ; i<4 ; i++){
	System.out.println(arr[i]);
}

2)获取数组元素数量:数组名.length;例子:arr.length

数组遍历的通用格式:

int[] arr = {.....};
for(int x = 0; x<arr.length;x++){
	System.out.println(arr[x]);
}

3)获取最值

int[] arr = {....};
int max = arr[0];
//定义一个变量,用于保存最大值(或最小值),取数组中第一个数据作为变量的初始值
for(int x = 1 ; x<arr.length ; x++){
	//与数组中剩余的数据逐个比对
	if(arr[x]>max){
	max = arr[x];
	}
}
System.out.println(max);

版权声明:本文为m0_46421964原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_46421964/article/details/108802706