数组用来存储一批同种类型的数据,分为静态初始化数组和动态初始化数组,且静态初始化数组与动态初始化数组写法是独立的,不可以通用。数组属于引用数据类型,数组变量中储存的是数组在内存中的地址信息。
1、 静态初始化数组的格式为
数据类型[] 数组名=new 数组类型[]{元素1,元素2,元素3};
eg.int[] ages = new int[]{12,24,36};
什么类型的数组只能存放什么类型的数据
数组的最大索引可以表示为:length-1(前提是元素个数大于0
①数组的访问
数组名[索引];数组的长度属性:length
eg.
②数组的遍历
遍历就是一个一个地访问一遍容器中的数据
遍历方法:
2、 动态初始化数组
定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数据长度
格式:
数据类型[] 数组名 =new 数据类型[长度];
动态初始化数组元素默认规则
基本类型:byte,short,char,int,long的默认值为0;float,double默认值为0.0;boolean默认值为false
引用类型:类,接口,数组,String默认值为null
(动态初始化适合开始不确定具体元素值,只知道元素个数的业务场景;静态初始化适合一开始就知道要存入哪些元素值的业务场景)
③数组在计算机中的执行原理
运行一个java程序 ,主要看jvm中包含的三个内存区域,分别为方法区,栈内存和堆内存
方法区:字节码文件先加载到这里
栈内存:方法运行是所进入的内存,变量也是在这里
堆内存:new出来的东西会在这块内存中开辟空间并产生地址
eg.int a = 20;int[]arr=new int[3]执行原理
a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
new int(3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。
多个变量指向同一个数组的问题
原因:多个数组变量中存储的是同一个数组对象的地址
注意:多个变量修改的都是同一个数组对象中的数据
常见问题:如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象,可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数据长度,会报空指针异常NullPointerException