1. 程式人生 > >陣列的基本概念和初始化方式

陣列的基本概念和初始化方式

一.陣列的基本概念

·        陣列可以看成是多個相同型別資料組合,對這些資料的統一管理。

·        陣列變數屬引用型別,陣列也可以看成是物件,陣列中的每個元素相當於該物件的成員變數。

·        陣列的元素可以是任何資料型別,包括基本型別和引用型別。

·        C和C++中的陣列都可以分配在棧上面,而JAVA中的陣列是隻能分配在堆上面的,因為JAVA中的陣列是引用型別。

二.一維陣列

一維陣列的宣告方式有2種:

·        格式一:陣列元素型別  陣列名[ ];  即type var[ ];

·        格式二:陣列元素型別[ ] 陣列名; 即type[ ] var;

·        格式二宣告陣列的方法與C#上宣告一維陣列的方法一樣。

例如:int a1[];   int[ ] a2;

      double b[ ];

      person[ ] p1;  String s1[ ];

注意:JAVA語言中宣告陣列時不能指定其長度(陣列中的元素個數)

      如:int a[5]; 這樣宣告一維陣列是非法的。

三.陣列的模型

·        一維陣列:一維陣列就是一行,一行小格。

·        二維陣列:二維陣列就是一行加一列組成的一個平面分成的小格,有行有列。

·        三維陣列:三維陣列就是一個立方體。

·        多維陣列實質上是將一個數組當成物件儲存到陣列中。

四.陣列物件的建立

  JAVA中使用關鍵字new建立陣列物件時的記憶體分配情況。

  格式為:陣列名 = new 陣列元素的型別[陣列元素的個數]

      例如:


五.元素為引用資料型別的陣列

  注意:元素為引用資料型別的陣列中的每一個元素都需要例項化。

例如:

class Date{

     int year; int moth; int day;

     Date(int y; int m, int d){

       year=y ;

    month=m ;

    day=d ;

  }

}


六.陣列的初始化

動態初始化:建立陣列時,由系統預設地為陣列中的元素賦初值,你指定陣列長度

靜態初始化:建立陣列時,程式設計師顯式地為陣列中的元素賦初值,你不指定陣列長度
陣列的隱式初始化:因為陣列是引用型別,它的元素相當於類的成員變數,因此陣列分配空間後,每個元素也被按照成員變數的規則被隱式初始化。

 一維陣列
1)   int[] a;   //宣告,沒有初始化

int a[];

a[0]=1;   //錯誤,因為陣列沒有初始化,不能賦值

a[1]=2; 

2)   int[] a=new int[5];   //初始化為預設值,int型為0(動態)

int[] a;   
a=new int[5];    //正確,兩種寫法一樣
3)   int[] a={1,2,3,4,5};   //初始化為給定值 (靜態)

int[] a;
a={1,2,3,4,5};  //錯誤,陣列常量只能在初始化操作中使用,如上
4)   int[] a=new int[]{1,2,3,4,5};   //同(3)  (靜態)

int[] a=newint[5]{1,2,3,4,5};   //錯誤,如果提供了陣列初始化操作,則不能定義維表示式

二維陣列
1)   int[][] a;  //宣告,沒有初始化


2)   int[][] a=new int[2][3];    //初始化為預設值,int型為0


3)   int[][] a={{1,2},{2,3},{3,4}};   //初始化為給定值 
     int[][] a={{1,2},{2,3},{3,4,5}};   //沒有錯,陣列空間不是連續分配的,所以不要求每一維的大小相同


4)   int[][] a=new int[2][];
     a[0]=new int[3];  //a[0]其實就是一個數組
     a[1]=new int[4];  //每一維的大小可以不一樣;


5)   int[][] a=new int[][]{{1,2},{2,3},{3,4,5}};   //同(3)  
     int[] a=new int[5]{{1,2},{2,3},{3,4,5}};  //錯誤,如果提供了陣列初始化操作,則不能定義維表示式

int[][] a=newint[2][];
     a[0]={1,2,3,4,5};   //錯誤,陣列常量只能在初始化操作中使用


6)   int[][] a=new int[2][];
     a[0][1]=1;   //錯誤,第二維沒有初始化,不能賦值,java.lang.NullPointerException異常


總結: 1、陣列在使用前(賦值,訪問)必須初始化,可以用new預設初始化,也可以用陣列常量初始化;

2、二維就是陣列的陣列,裡面的陣列大小不要求一樣


·        1.動態初始化

    陣列定義與為陣列元素分配空間和賦值的操作分開進行

例如:

 1 public class Test{

 2     public static void main(String args[ ]){

 3     int a[ ];  //定義陣列,即宣告一個int型別的陣列a[ ]

 4     a=newint[3];  //給陣列元素分配記憶體空間。

 5     a[0]=3; a[1]=9; a[2]=8; //給陣列元素賦值。

 6     Date days[ ];

 7     days=new Date[3];

 8     days[0]=new Date(1, 4, 2004);

 9     days[1]=new Date(2, 4, 2004);

10    days[2]=newDate(3, 4, 2004);

11    }

12 }

13

14 class Date{

15    intyear, month, day;

16    Date(int y,int m,int d){

17        year = y ;

18        month = m ;

19        day = d ;

20    }

21 }

22                

·        2.靜態初始化

       在定義陣列的同時就為陣列元素分配空間並賦值。

例如:

puclic classTest{

        public static voidmain(String args[ ]){

            int a[ ] = { 3, 9, 8};  //在定義陣列的同時給陣列分配空間並賦值。

            Date days[ ] = {

                new Date(1, 4, 2004),

                new Date(2 ,4 ,2004),

                new Date(3 ,4, 2004)

        };

    }

}

class Date{

    int year, month, day;

    Date(int y, int m, intd){

        year = y ;

        month = m ;

        day = d ;

    }

}

七.陣列元素的預設初始化

·        陣列是引用型別,它的元素相當於類的成員變數,因此給陣列分配記憶體空間後,每個元素也被按照成員變數的規則被隱式初始化。

 1 public class Test{

 2         public static void main(String args[ ]){

 3             int a[ ] = new int[5];

 4             Date[ ] days=new Date[3];

 5             System.out.println(a[3]);

 6             System.out.println(days[2]);

 7     }

 8 }

 9 class Date{

10    intyear, month, day;

11    Date(int y,int m,int d){

12        year = y ;

13        month = m ;

14        day = d ;

15    }

16 }

輸出結果:

System.out.println(a[3]);   打印出來的結果是:0。

System.out.println(days[2]);  打印出來的結果是:null(空)

在陣列的初始化時,儲存的資料型別是基本資料型別時,其預設值為基本資料型別初始化時的預設值。如,整型的預設值為0;

boolean型的預設值為false等。而引用資料型別的預設值為null。而陣列也屬於引用資料型別。所以b中的陣列中存放的是一個數組而一維陣列是一個引用資料型別,預設初始化的值是null。

int [][]b = new int[3][];

b = {null, null, null};

八.陣列元素的引用

       定義並用運算子new為之分配記憶體空間後,才可以引用陣列中的每個元素,陣列元素的引用方式為:arrayName[index], index為陣列元素下標,可以是整型常量或整型表示式。如:a[3], b[i],c[6*i]。

   陣列元素下標從0開始;長度為n的陣列的合法下標取值範圍為0 ~ n—1。

       每個陣列都有一個屬性length指明它的長度,例如:a.length的值為陣列a的長度(元素個數)。

九.二維陣列