在上一篇文章中我们了解了数组的声明和创建,本篇文章中我们了解一下声明数组,创建数组,给数组赋值以后,栈和堆都是怎么样子分配的,了解一下底层的逻辑知识,让大家可以更好的理解数组。
首先我们来回顾一下数组的声明,创建,以及赋值。
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
}
}
我们逐步来了解,从声明到赋值,栈和堆的分配。
声明数组以后,在栈中分配了一块空间,数组名字为array,数据类型为int类型。
创建数组,new一个数组的对象,new了以后,就会在堆里面分配一块空间。
我们创建了一个长度是10的数组,但是由于索引从0开始,所以真实的顺序是0-9,我们为0-9赋值,所以在刚刚分配的大空间中,又分配了10个小空间。
下标的合法区间[0,length-1],如果越界就会报错
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
}
}
我们上面定义的范围是10个,下标最后一个是9,如果我们要输出下标是10的数组,就会提示报错!
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
System.out.println(array[10]);
}
}
我们执行以下上面的代码,就会看到以下的报错。
ArrayIndexOutOfBoundsException
初始化数组一共有三种方式。
public class Demo {
public static void main(String[] args)
{
//静态初始化数组 创建加赋值
int[] b={1,2,3,4,5};
System.out.println(b[0]);
}
}
public class Demo {
public static void main(String[] args)
{
One[] ones = {new One(1,1),new One(2,2)};
}
}
public class Demo {
public static void main(String[] args)
{
int[] a = new int[2];
int[0]=1;
int[1]=2;
}
}