java数组的定义初始化关于内存的理解

来源:互联网 发布:基尼系数统计学算法 编辑:程序博客网 时间:2024/05/19 06:37

壹:

对于数组的定义有以下的两种方式:

 <1> type[]  var = null;

 <2>type var[] = null;

package base;public class ArrayDefinition {   public static void main(String args[]){   int [] var = null;//这种比较常用相比下面的那一种   int var2[] = null;//编译已经通过了,只是会出现警告(定义了一个空指针)   }}

贰:

然而对于数组的初始化,可以分为两种即为静态初始化和动态初始化(有的地方说是还有一种“隐士初始化”,但我个人认为两种就可以啦吐舌头

<1>静态初始化:所谓静态初始化是指的在定义数组的时候就为数组元素分配空间并赋值

<2>动态初始化:数组的定义,数组的空间分配,还有数组元素赋值分开操作

(补:<3>隐士初始化即按照数组的成员变量规则,给其赋值(堆内存都有初始值)。。。规则如下

        1、int ,byte ,short ,long                            0

        2、float ,double                                       0.0

        3、boolean                                             false

        4、char                                                \u0000

        5、引用类型的如数组,类,接口            null )

package base;public class ArrayDefinition {   public static void main(String args[]){   int [] var = null;   int var2[] = null;   var = new int[5];   var2 = new int[]{1,4,5};   for(int i = 0;i<var.length;i++){   System.out.print(var[i]+" ");   }   System.out.println();   for(int i = 0;i < var2.length;i++){   System.out.print(var2[i] + " ");   }   }}
/*运行结果:

0 0 0 0 0 
1 4 5 

*/

叁:

在这里重点讲一下注意事项:

<1>再定义数组的时候不能声明指出数组的大小。因为数组的定义只是单单的定义一个指针只是栈里面的一个变量,并没有指向什么地址,像以上代码指的就是null

<2>运行的时候才进行的创建的过程(堆里面),只有运行的时候才会创建实体所以以下的代码编译的时候不会出错

   var2 = new int[]{1,4,5};
  System.out.println(var2[3]);//编译的时候没有问题。运行的时候才会报错
<3>静态初始化与动态初始化不能同时进行,通俗点就是不能既规定了数组的长度又给每个数组元素赋了值

在网上经常有网友会问为什么或者静态与动态初始化的区别,其实是个定义理解的

静态是:

已经存放了自己知道的且不改变的数据

动态是:

      声明时候只是给数组分配了内存大小空间,空间里除了初始值什么也没有,实际放什么值是要由后面的程序来指定的,因为一开始放什么,我们也许也并不清楚


肆:

综上有以下三种数组对于定义初始化:

<1>type[] arr = new type[length]

<2>type[] arr = new type[]{object1,object2,object3...................}

<3>type[] arr = {object1,object2,object3...................}

原创粉丝点击