大白菜的java开发学习之旅-------数组
什么叫数组?
同一种数据类型的集合(容器),数据类型有基本数据类型(byte,short,int,long,float,double,boolean,char)和引用数据类型(String,基本数据类型的包装类及其他),比如:存钱罐只是用来存钱,钱是数据类型,一块钱,一毛钱那些属于数组的元素;
定义格式:
格式一(常用):
数据类型[] 数组名= new 数据类型[数组的长度(元素的个数)];
eg: int[] array = new int[10];
格式二:
数据类型 数组名[] = new 数据类型[数组的长度(元素的个数)];
eg: int array[] = new int[5];
注意:格式一,格式二必须要进行初始化,即给数据长度,长度必须为0或者正整数,如果是负数会出行运行时异常 NegativeArraySizeException;
格式三:
数据类型 数组名[] = new 数据类型[]{元素1,元素2,....元素n};
eg: int array[] = new int[] {};
int array[] = new int[] {1,9,10};
格式四:
数据类型[] 数组名= new 数据类型[]{元素1,元素2,....元素n};
eg: int[] array = new int[] {};
int[] array = new int[] {1,9,10};
格式五:
数据类型[] 数组名= new 数据类型[元素1,元素2,....元素n];
eg: int[] array = new int[](错) ;
int[] array = new int[1,9,10] ;
格式六:
数据类型 数组名[] = new 数据类型[元素1,元素2,....元素n];
eg: int array []= new int[](错) ;
int array[] = new int[1,9,10] ;
内存分析:
当创建一个数组时,会在栈内存中创建相应的变量,根据数组的长度,会在堆内存中会开辟相对应的内存空间,内存空间会会分成相应的一小块内存(数量就是数组的长度),根据对应的索引便可以获得对应内存块中的值;
如图所示:先创建数组arr1,在栈内存中声明变量arr1,再到堆内存中划分相应的内存空间,此时arr1的值便是记录对应的内存地址(第一条数据的内存地址),因为是int类型,所以每一块内存中存储的值默认为0,arr2和arr1一样,然后arr1[0]的值由0变成了1,arr2[1]由0变成了2;
数组中最常见的问题:
1. NullPointerException 空指针异常
原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
2. ArrayIndexOutOfBoundsException 索引值越界异常。
原因:访问了不存在的索引值,数组的下标从0开始到length-1结束。
注意事项:
1. 如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化比如格式三,四,五,六。如果数据一开始还不太明确,这时候就建议使用动态初始化。
2. 数组只能存储同一种 数据类型的数据。
3. 数组是会给存储到数组中 的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1;
4. 数组一旦初始化,长度固定。
5. 数组中的元素与元素之间的内存地址是连续的。