数组的内存分析与三种初始化类型
具体需要了解三部分: 堆、 栈、 方法区
堆:
-
存放new的对象和数组
-
可以被所有的线程共享,不会存放别的对象引用。
栈:
-
存放基本变量类型(包含该基本类型的具体数值)
-
引用对象的变量(会存放这个引用在堆里的具体地址)
方法区:
-
可以被所有的线程共享
-
包含了所有的class和static变量
数组的内部形成过程
在声明数据后,首先在栈里生成一个int类型叫array的空数组,第二步,创建数组时,array会在堆里生成一个用来存放数组元素的空间,并根据所输入的数字生成相应数量的下标。最后第三步,给数组的元素赋值,就可以根据下标找到所对应的数字,如该元素没有被赋值,则默认为0。
因为给数组赋的大小只有10个,如果在取值时,取超出的下标,就会如下报错:
java.lang.ArrayIndexOutOfBoundsException: (数组下标超出界限)
array:数组 index:下标 out:出 bounds:界限 exception:异常
数组三种初始化类型
//静态初始化
//数组类型 变量名= 数组
int[] a = {1,2,3,4,5,6,7,};
System.out.println(a[0]);
在静态初始化中,大括号用来表示包含的数组,写了多少个元素,就是多大空间,空间一旦确定,就不可被改变。输出时按照下标从0开始的先后顺序输入对应的下标即可。
动态初始化
//动态初始化
int[] nums=new int[10];//声明并创建一个数组
//给数组的元素赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
nums[5] = 6;
nums[6] = 7;
nums[7] = 8;
nums[8] = 9;
nums[9] = 10;
System.out.println(nums[9]);
动态初始化可以先声明类型,再创建数组,最后给元素赋值。他的存储空间不会因为数组存储的数据的数量而改变,如果数量不足则默认赋值0;数量超出则报错。但它的存储空间可以任意调节改变。
默认初始化
//3、默认初始化
int[] b = new int[8];//声明并创建
b[0] = 5;//给下标0 赋值5
System.out.println(b[0]);//输出为5
System.out.println(b[6]);//输出为0
在创建了数组的时候,它就已经被赋值了。而它的默认初始值,我们可以通过重新赋值来改变初始值。如果不赋值的元素,默认值就为0。