java数组的初始化和声明

数组声明

  对于数组的声明其实都没多大问题,推荐的写法是使用 数据类型 + [] + 数组名称的方式,因为这种方式可以很清楚的表明这是某一种类型的数组。例如,声明一整数类型的数组。

int[] a;

数组初始化

  其实出现问题最多的就是数组的初始化。数组的初始化分为三种方式,再遇到初始话的时候,总是会搞不清楚。根据我个人的理解,数组的初始化操作分为三种方式。

第一种:特殊初始化,不用new关键字完成,在数组声明的同时完成初始化操作,也被称其为静态初始化。主要原因是因为采用这种初始化的方式,数组的存储空间的分配是由编译器完成的。

     下面以整数数组初始化为例,完成一个静态数组初始化:

     int[] a = {1,2,3};
     Integer[] b = {
         new Integer(1), 
         new Integer(2), 
     };

第二种:先使用new关键字创建数组,然后再分别为数组中的元素赋值,完成初始化操作。(注:如果数组元素类型为基本数据类型,在完成new 操作之后,数组中的元素会自动初始化为空值,可以直接使用,但是数组元素为引用类型,在完成new操作之后,没有给引用类型赋值,就直接使用数组中的元素,会产生运行时异常。)

    下面还是以整数数组初始化为例2,完成数组初始化:

         int[] a = new int[2];   //需要指定数组的长度
         a[0] = 1;
         a[1] = 2;

  第三种:使用new关键字创建数组,同时为数组中的元素赋值,完成出事化操作。

      int[] a = new int[]{1,2,3}; //与第二种方法不同,这里new不需要指定数组的长度,数组长度由其后的初始化操作确定
      int[] b = new int[]{
                 new Integer(1), 
                 new Integer(2),
         };

在编程时,有时候声明数组只声明了数组长度,没有进行初始化int [] array = new int[5]; ,或者在类中声明了全局变量但是没有初始化。 这两种情况下,数组的元素和全局变量其实是有默认值的。下面是各种类型数组或者变量的默认值:

byte,short和int类型的数组或者成员变量默认值: 0
long 类型的数组或者成员变量的默认值: 0L
char 类型的数组或者成员变量默认值: 空格 ‘\u0000’
foat 类型的数组或者成员变量默认值: 0.0f 或 0.0F
double类型的组或者成员变量默认值: 0.0
boolean类型的数组或者成员变量默认值: false
String类型的数组或者成员变量默认值: null
引用类型的数组或者成员变量默认值都是null,String 也是引用类型

    private int [] c = new int[3];  //全局变量,有声明 ,有进行初始化,初始化为0
    private int [] f ;  //全局变量,没有声明 ,没有初始化值,使用
    private void stack() { //
        Log.e("MainActivity", "onCreate: "+c[0]); //初始化结果为0
        //Log.e("MainActivity", "onCreate: "+f[0]); //**运行时报错**  NullPointerException
        int [] d = new int[3];  //局部变量, 有声明 ,有初始化值
        int [] g ;
        Log.e("MainActivity", "stack: "+d[0]); //初始化结果为0
        //Log.e("MainActivity", "stack: "+g[0]); //**编译时报错**
    }

猜你喜欢

转载自blog.csdn.net/viking_xhg/article/details/79878114