Java中数组的使用(初学者必备)

  • Post author:
  • Post category:java


数组在编程中有很高的作用,他用来存储相同数据类型的同一类数据,对编程小白来说学习数组非常重要。在以后的编程学习中占有很高的地位,对于初学者要清楚在Java中数组的定义格式、怎样存储数组元素、怎样操作数组元素、结合数组解决实际业务、数组在内存中如何存储(内存管理)等内容。

二、数组的初始化

在实际的编程中数组初始化分两种1、静态初始化数组 2、动态初始化数组

1、静态初始化数组

定义:在定义数组时直接给数组赋值

格式:数据类型 [ ] 数组名 =new 数据类型[ ]{数据1,数据2,……….};

简化格式:数据类型 [ ]数组名={数据1,数据2………};

例如:int [ ] ArraryDemo=new int [ ]{12,13,14,15,16};

double [ ] ArraryDemo=new double [ ]{12.2,13.0,16.5,17.0};

String [ ] ArraryDemo=new String [ ]{“迪丽热巴”,”哈妮克孜”,”吉克隽逸”};

***注意:数组变量名存储的是数组在内存中的地址,数组是引用类型。

2、动态初始化数组

定义:定义数组时只确定数组的长度和数据类型无需给数组赋值

格式:数据类型 [ ] 数组名=new 数据类型 [数组长度];

例如:int [] ArraryDemo=new int [10];

double [] ArraryDemo=new double[10];

String [] ArraryDemo=new String[10];

*****动态初始化数组默认值规则******

public class ArraryDemo(){
    public static void main(String []args){


       //整形动态数值化数组的默认值为0
       int []ArraryIntDemo=new int[5];
       System.out.println(ArraryIntDemo[1]);
 
       //字符型动态数组的默认值为0
       char []ArraryCharDemo=new char[5];
       System.out.println((int)ArraryCharDemo[1]);

       //浮点型动态初始化数组的默认值0.0
       double []ArraryDoubleDemo=new double[5];
       System.out.println(ArraryDoubleDemo[1]);

       //布尔类型动态初始化数组的默认值false
       boolen []ArraryBoolenDemo=new boolen[5];
       System.out.println(ArraryBoolenDemo[1]);

       //引用类型动态初始化数组默认值null
       String ArraryStrDemo=new String[5];
       System.out.println(ArraryStrDemo[1]);
    }
}

三、数组的访问

无论是静态初始化数组还是动态初始化数组,数组的访问很简单

格式:数组名[索引值];

以静态数组为例,访问格式为

public calss MyArraryDemo{
    public static void main(String args[]){
        int []score=new int[]{12,13,15,19,14};

        System.out.println(score[1]);
        System.out.println(score[2]);
        System.out.println(score[3]);
        System.out.println(score[4]);
    }
}

注意**:数组的索引值是从0开始的,所以score[0]的数值是12;

四、数组的长度和最大索引值

运用数组名调用length可以得出数组的长度,最大索引值是数组长度-1。

public class MyArraryDemo{
    public static void main(String[] args){
         int [] score = new int []{12,13,14,15,16};
         //数组长度
         System.out.println("数组的长度为:"+score.length);
         //最大索引值
         System.out.println("最大索引值"+score.length-1);
    }
}

输出的数组的长度为5,最大索引值为4。

***数组的注意事项:

1、什么类型的数组存放什么类型数据

2、数组一旦被定义出来,执行过程中长度类型就固定了

3、数组的索引值不能超过数组的长度,否侧程序会报错无法运行

4、当已经知道存入的元素值时 用静态数组初始化

5、当不知道要存入数组的数据时 用动态数组初始化

五、数组的内存分配

理解数组的内存分配对学习数组至关重要,程序在运行时主要有,方法区、栈内存、堆内存,

方法区:字节码文件加载时进入的内存,例如HolloWorld.class

堆内存:new出来的东西会在这块内存中开辟空间并产生地址

栈内存:方法运行时所进入的内存,另外变量也在这里。

public class ArrMemory(){
      public static void main(String args[]){

          int i=5;//普通变量所存储的就是他本身的值

          int []Arr=new int[]{1,2,3};

          Arr[0]=11;
          Arr[1]=22;
          Arr[2]=33;

          for(int i=0;i<Arr.length-1;i++){
              System.out.println(Arr[i]);
          }

       }
}

***程序开始运行时

1、首先将程序编译成ArrMemory.class文件并加载到方法区

2、将main()方法加载到栈内存,开始运行第一行代码i=5,将在栈内存中开辟一个a变量的区域将5存储到里边,然后在开辟一个空间用来存放数组变量Arr,随即系统将会在堆内存中开辟一段的数组空间用来存放数组元素,并将产生的地址赋值给数组变量Arr。

3、然后就可以通过数组变量Arr来访问堆内存中的数组元素。

六、两个数组变量指向同一个数组对象

public class demo06 {
    public static void main(String[] args) {
        //两个数组变量指向同一个数组对象
        int []ArrIntDemo1={1,2,3};

        int []ArrIntDemo2=ArrIntDemo1;

        ArrIntDemo2[0]=11;
        ArrIntDemo2[1]=22;
        ArrIntDemo2[2]=33;

        //输出两个数组的地址
        System.out.println(ArrIntDemo1);
        System.out.println(ArrIntDemo2);
        //输出元素值
        System.out.println(ArrIntDemo1[1]);
        System.out.println(ArrIntDemo2[1]);

        //数组使用的常见问题
        //1、如果访问元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
        int []arr=new int[]{1,2,3};
        System.out.println(arr[2]);
        //System.out.println(arr[3]);//出现异常

        //2、如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现NullPointerException(空指针异常)
        int []ary=new int[3];
        ary=null;
        System.out.println(ary);
        //System.out.println(arr.length);//出现异常


    }
}

以上代码会发现数据类型相同的数组之间可以直接赋值,且赋值之后的数组变量和原数组变量具有相同的地址空间,可通过新的数组变量直接操作数组中的数据元素。



版权声明:本文为m0_46813381原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。