什么是数组呢?
数组是用来存储同一种数据类型多个元素的容器
数据类型:可以是基本类型,也可以是引用类型
容器:比如教室(有多个学生;多个桌子等),衣柜(放多个衣服)等,可以存放多个事物
数组的定义格式
数组的定义格式一:
数据类型[] 数组名= new 数据类型[长度]
例:
//定义一个长度为3的整型数组 int[] arr=new int[3];
数组的定义格式二:
数据类型[ ] 数据名 = new 数据类型[ ]{元素1,元素2,元素3...}
好处:定义时元素时确定的,避免内存空间的浪费
例:
//定义一个长度为3的整型数组 int[] arr2 = new int[][1,2,3]
数组的定义格式三:
数据类型[ ] 数组名 ={元素1,元素2,元素3....}
格式三是格式二的变形,简化了代码编写
例:
//定义一个长度为3的整型数组 int[] arr3 = {1,2,3}
定义格式详解:
数据类型:即数组中存储元素的数据类型,可以是基本数据类型,也可以是引用数据类型
[ ]:表示数组
数组名:数组的变量名,遵循标识符命名规范
new :创建数组的关键字,通过new开辟内存空间
长度:即数组长度,数组最多能够存放元素的个数。
注意:数组长度在定义时指定,不可更改
数组的访问
通过数组的索引访问数组的元素
索引:也叫下标、脚标,是数组元素距离数组起始位置的偏移量。
第一个元素的偏移量为0,所以数组的索引从0开始
格式:数组名[索引]
取值:数组名[索引]
赋值:数组名[索引] = 值
例:
//定义一个长度为3的整型数组 int[ ] arr3 = {1,2,3}; System.out.print(arr3[0]); //输出:1
//定义一个长度为3的整型数组 int[] arr3 ={1,2,3}; arr3[1] =4; //给第2个元素赋值为4 System.out.print(arr3[1]); //输出:4
数组的初始化
在内存中为数组开辟连续空间并为每个元素赋值的过程
内存:计算机的重要组件,用于程序运行中临时存储的数据。
连续空间:数组元素在内存空间中的存放位置是连续的
而在数组的初始化中只要分为两种状态
动态初始化:只指定长度,由系统给出默认值,比如数组的格式定义一
整型:0
浮点型:0.0
字符型:‘u0000’(空字符串)
布尔型:false/true
引用类型:null
静态初始化:给出初始化值,由系统决定数组长度,比如数组的格式定义一,二
java程序的内存分配
方法区:存储可运行的class文件,包含方法,静态成愿,常量等
栈:方法运行时使用的内存,特点是”先进后出“,即最先进入栈区的方法最后出栈,比如main方法
堆:存储new出来的数组或对象
本地方法栈:JVM在调用操作系统功能时使用,与开发无关
寄存器:CPU使用,与开发无关
数组类型:变量arr存储的是数组在堆内存中的地址值,而不是数组元素的值,变量arr通过内存地址引用堆内存中的数组,所以
数组是引用类型。
数组使用中常见的两个问题
数组索引越界异常:ArrayIndexOutOfBoundsException
当访问了不存在的索引时(比如:数组的长度为3(0,1,2),而去访问这个数组下标为3的元素)
异常:即非正常情况,可以简单理解为程序运行过程中出现错误
空指针异常:NullPointerException
数组引用存储的值为null而非数组的地址时
例:
int[] arr1 =new int[3]; arr1[0] =1; arr1[1] =2; arr1[2] =3; System.out.println(arr1[0]); //1 System.out.println(arr1[1]); //2 arr1=null; System.out.println(arr1[2]); //报错
引用类型和基本类型的区别
基本类型的变量作为参数传递时,传的是”值“
引用类型的变量作为参数传递时,传的是”地址值“