教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java中定義數(shù)組的三種方式?

更新時間:2021年04月12日16時34分 來源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)


在Java中,數(shù)組的定義有三種方式,其基本語法格式如下:

數(shù)組類型[] 數(shù)組名 = new 數(shù)組類型[數(shù)組長度];   
數(shù)組類型[] 數(shù)組名 = new 數(shù)組類型[]{數(shù)組元素0,數(shù)組元素1,...};  
數(shù)組類型[] 數(shù)組名 = {數(shù)組元素0,數(shù)組元素1,...};

在上述三種定義數(shù)組的語法格式中,數(shù)組類型可以是前面小節(jié)中介紹的變量的數(shù)據(jù)類型,數(shù)組名就是定義的變量名,要符合標(biāo)識符的規(guī)范,數(shù)組長度表示該數(shù)組中可容納的數(shù)組元素的個數(shù),而數(shù)組元素0、數(shù)組元素1就表示定義的數(shù)組中具體包含的數(shù)據(jù)。

以上三種定義數(shù)組語法格式的實(shí)際使用示例如下:

int[] ids = new int[100];   
String[] names = new String[]{"張三","tom",...};  
Object[] object = {"張三","tom",...};

第一種方式定義了一個int[]數(shù)組類型的變量ids,使用new int[100]指定了該數(shù)組的長度(也就是元素的個數(shù))為100,但并沒有為數(shù)組中的元素賦值;第二種和第三種方式分別定義了一個String[]類型和Object[]類型的數(shù)組變量names和object,并都通過“=”右邊的大括號“{}”為數(shù)組完成了初始化賦值。

關(guān)于數(shù)組在內(nèi)存中的存儲方式,這里以上述定義數(shù)組的第一種方式為例,來進(jìn)行具體說明。第一種數(shù)組定義的方式,相當(dāng)于在內(nèi)存中定義了100個int類型的變量,第一個變量的名稱為ids[0],第二個變量的名稱為ids[1],以此類推,第100個變量的名稱為ids[99],這些變量的初始值都是0。為了更好地理解數(shù)組的這種定義方式,可以將上面的一句代碼分成兩句來寫,具體如下:

int[] ids;      // 聲明一個int[]類型的變量
ids = new int[100]; // 創(chuàng)建一個長度為100的數(shù)組,并將數(shù)組地址賦值給數(shù)組類型的變量x

接下來通過兩張內(nèi)存圖來詳細(xì)地說明數(shù)組在創(chuàng)建過程中內(nèi)存的分配情況。

第一行代碼 int[] ids; 聲明了一個變量ids,該變量的類型為int[],即一個int類型的數(shù)組。變量ids會占用一塊內(nèi)存單元,它沒有被分配初始值。此時ids在內(nèi)存中的狀態(tài)如圖1所示。

Java中定義數(shù)組有幾種方式?

圖1 內(nèi)存狀態(tài)圖

第二行代碼 ids = new int[100]; 創(chuàng)建了一個數(shù)組,并將數(shù)組的內(nèi)存地址賦值給變量ids。在程序運(yùn)行期間可以使用變量ids來引用數(shù)組,這時內(nèi)存中的狀態(tài)會發(fā)生變化,如圖2所示。

Java中定義數(shù)組有幾種方式?

圖2 內(nèi)存狀態(tài)圖

圖2描述了變量ids引用數(shù)組的情況。該數(shù)組中有100個元素,初始值都為0。數(shù)組中的每個元素都有一個索引(也可稱為角標(biāo)),要想訪問數(shù)組中的元素可以通過“數(shù)組名[角標(biāo)]”的形式,即“ids[0]、…、ids[99]”。需要注意的是,數(shù)組中最小的索引是0,最大的索引是“數(shù)組的長度-1”。在Java中,為了方便獲得數(shù)組的長度,提供了一個length屬性,在程序中可以通過“數(shù)組名.length”的方式來獲得數(shù)組的長度,即數(shù)組元素的個數(shù)。

接下來通過一個完整的案例來演示如何定義數(shù)組以及訪問數(shù)組中的元素,如文件1所示。

文件1 Example18.java

     public class Example18 {
         public static void main(String[] args) {
             // 1、第一種方式定義數(shù)組
             int[] ids = new int[100];    
             System.out.println("ids[0]="+ids[0]);   //訪問數(shù)組第一個元素
             System.out.println("ids[99]="+ids[99]);//訪問數(shù)組最后一個元素
             System.out.println("==============");
             // 2、第二種方式定義數(shù)組
             String[] names = new String[]{"張三","tom","jack"};  
             System.out.println("names[0]="+names[0]);     //訪問數(shù)組第一個元素
             System.out.println("names[2]="+names[2]);     //訪問數(shù)組最后一個元素
             System.out.println("==============");
             // 3、第三種方式定義數(shù)組
             Object[] object = {"張三","tom","jack"};  
             System.out.println("數(shù)組的長度為:"+object.length);//獲取數(shù)組的長度
             System.out.println("object[0]="+object[0]);  //訪問數(shù)組第一個元素
             System.out.println("object[2]="+object[2]);  //訪問數(shù)組最后一個元素
         }
     }

運(yùn)行結(jié)果如圖3所示。

Java中定義數(shù)組有幾種方式?

圖3 運(yùn)行結(jié)果

文件1中,分別聲明了一個int[]類型、String[]類型和Object[]類型的數(shù)組,然后通過“數(shù)組名[角標(biāo)]”的形式獲取了數(shù)組的第一個和最后一個元素值,并打印到控制臺上。從打印結(jié)果可以看出,第一種定義數(shù)組方式定義的int[]類型的數(shù)組中元素的初始值都為0,這是因?yàn)楫?dāng)數(shù)組被成功創(chuàng)建后,數(shù)組中元素會被自動賦予一個默認(rèn)值,根據(jù)元素類型的不同,默認(rèn)初始化的值也是不一樣的;而第二種和第三種定義數(shù)組方式定義的數(shù)組都指定了初始值,所以打印出對應(yīng)角標(biāo)的元素值。

Java中不同數(shù)據(jù)類型元素的初始值如表1所示。

表1 Java不同數(shù)據(jù)類型元素的默認(rèn)值

數(shù)據(jù)類型 默認(rèn)初始化值
byte、short、int、long                                          0                                                             
float、double 0.0
char 一個空字符,即’\u0000’
boolean false
引用數(shù)據(jù)類型 null,表示變量不引用任何對象

在使用數(shù)組時,如果不想使用這些默認(rèn)初始值,可以顯式地為這些元素賦值,當(dāng)然也可以對定義數(shù)組時的指定初始值進(jìn)行修改。接下來對上面的案例進(jìn)行修改來學(xué)習(xí)一下如何為數(shù)組中的元素賦值和修改,如文件2所示。

文件2 Example19.java

     public class Example19 {
         public static void main(String[] args) {
             // 1、第一種方式定義數(shù)組
             int[] ids = new int[100];    
             System.out.println("ids[0]="+ids[0]);  //訪問數(shù)組第一個元素
             // 為數(shù)組指定元素進(jìn)行初始化賦值
             ids[0] = 2500;
             System.out.println("ids[0]="+ids[0]); //再次訪問數(shù)組第一個元素
             System.out.println("==============");
             // 2、第二種方式定義數(shù)組
             String[] names = new String[]{"張三","tom","jack"};  
             System.out.println("names[0]="+names[0]);   //訪問數(shù)組第一個元素
             // 為數(shù)組定義時指定的初始值進(jìn)行修改
             names[0] = "李四";
             System.out.println("names[0]="+names[0]);   //再次訪問數(shù)組第一個元素
             System.out.println("==============");
             // 3、第三種方式定義數(shù)組
             Object[] object = {"張三","tom","jack"};  
             System.out.println("object[0]="+object[0]); //訪問數(shù)組第一個元素
             // 為數(shù)組定義時指定的初始值進(jìn)行修改
             object[0] = "李四";
             System.out.println("object[0]="+object[0]); //再次訪問數(shù)組第一個元素
         }
     }

運(yùn)行結(jié)果如圖4所示。
Java中定義數(shù)組有幾種方式?

圖4 運(yùn)行結(jié)果

文件2中,三種定義數(shù)組的方式都使用了“數(shù)組名[角標(biāo)]=元素值”的形式對各數(shù)組中指定角標(biāo)的元素進(jìn)行了賦值和修改。從修改的代碼以及程序運(yùn)行結(jié)果可以看出,對數(shù)組中的元素進(jìn)行賦值或修改操作所使用的方式一樣,只是在使用“數(shù)組名[角標(biāo)]=元素值”的形式對數(shù)組元素進(jìn)行操作時,如果數(shù)組指定角標(biāo)的元素只有默認(rèn)初始值,那么就是對元素進(jìn)行的賦值操作;如果數(shù)組指定角標(biāo)的元素已經(jīng)有了初始值,那么就是對元素進(jìn)行的修改操作。

注意:

1.每個數(shù)組的索引都有一個范圍,即0~length-1。在訪問數(shù)組的元素時,索引不能超出這個范圍,否則程序會報錯,如文件3所示。

文件3 Example20.java

     public class Example20 {
         public static void main(String[] args) {
             int[] arr = new int[4];                     // 定義一個長度為4的數(shù)組
             System.out.println("arr[4]=" + arr[4]); // 通過角標(biāo)4訪問數(shù)組元素
         }
     }

運(yùn)行結(jié)果如圖3所示。

Java中定義數(shù)組有幾種方式?

圖5 運(yùn)行結(jié)果

從圖5可以看出,程序運(yùn)行后提示了“ArrayIndexOutOfBoundsException”即數(shù)組角標(biāo)越界異常的錯誤。出現(xiàn)這個異常的原因是數(shù)組的長度為4,其索引范圍為0~3,文件中的第4行代碼使用索引4來訪問元素時超出了數(shù)組的索引范圍。所謂異常指程序中出現(xiàn)的錯誤,它會報告出錯的異常類型、出錯的行號以及出錯的原因,關(guān)于異常內(nèi)容在后面的章節(jié)會有詳細(xì)地講解。

2.在使用變量引用一個數(shù)組時,變量必須指向一個有效的數(shù)組對象,如果該變量的值為null,則意味著沒有指向任何數(shù)組,此時通過該變量訪問數(shù)組的元素會出現(xiàn)空指針異常,接下來通過一個案例來演示這種異常,如文件4所示。

文件4 Example21.java

     public class Example21 {
         public static void main(String[] args) {
             int[] arr = new int[3]; // 定義一個長度為3的數(shù)組
             arr[0] = 5;                  // 為數(shù)組的第一個元素賦值
             System.out.println("arr[0]=" + arr[0]);    // 訪問數(shù)組的元素
             arr = null;                 // 將變量arr置為null
             System.out.println("arr[0]=" + arr[0]);     // 再次訪問數(shù)組的元素
         }
     }

運(yùn)行結(jié)果如圖6所示。
Java中定義數(shù)組有幾種方式?

圖6 運(yùn)行結(jié)果

從圖6可以看出,文件4中的第4、5行代碼都能通過變量arr正常地操作數(shù)組,而在第6行代碼將變量置為null后,在第7行代碼再次訪問數(shù)組時就出現(xiàn)了“java.lang.NullPointerException”的異常信息,即空指針異常。




猜你喜歡:

什么是java變量,java變量的定義

Java類的定義格式:Java如何定義一個類

Java 跳轉(zhuǎn)語句break和continue的用法

傳智教育Java培訓(xùn)

0 分享到:
和我們在線交談!