数组的内存分析与三种初始化类型

数组的内存分析

具体需要了解三部分: 堆、 栈、 方法区

堆:

  1. 存放new的对象和数组

  2. 可以被所有的线程共享,不会存放别的对象引用。

栈:

  1. 存放基本变量类型(包含该基本类型的具体数值)

  2. 引用对象的变量(会存放这个引用在堆里的具体地址)

方法区:

  1. 可以被所有的线程共享

  2. 包含了所有的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。

 

posted on 2020-10-13 23:29  晋歪歪  阅读(141)  评论(0编辑  收藏  举报