堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面
在定义和创建数组的时候内存发生了什么?
当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有创建。这时在栈里记录了一个int类型的数组Array,但是栈里面并没有存放数组里面的数据,当用户创建数组是,例:int [ ] Array=new int[5];在内存空间的堆创建了一个int类型的Array数据,并定义数组长度是5,所以数组创建前也就是在定义的时候,是存放在栈里的,创建后并赋值之后是存放在堆里面的
数组的下标越界:
当用户定义了一个int类型的数组名为Array长度为5,数组的下标为(0-Array.length)-1,也就是0-4,
int [] Array = new int[5]; //数组也可以直接创建,无需定义,定义则是空数组 Array[0]=1; //分别赋予初始值 Array[1]=2; Array[2]=3; Array[3]=4; Array[4]=5;
当我取的值大于数组的最大长度则会出现下表越界的现象
例如:下表最大是4但是我取5的值,则会报错
System.out.print(Array[5])
//第一种 int []Array; //只定义数组,并没有创建 //第二种 int [] Array = new int [10];//无需声明数组,直接创建数组并指定长度
静态初始化与动态初始化
静态初始化
int [] Array1={1,2,3,4,5,6,7,8,9,10}; //定义数组时并定义初始值 int [] Array2={11,22,33,44,55,66,77,88,99,100};//定义后无法修改
Man引用类型
Man[] mans={new Man1(),new Man2()};
动态初始化
int [] Array = new int [10]; //先创建后赋予值 Array[0]=100; Array[4]=400;