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

全國(guó)咨詢/投訴熱線:400-618-4000

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

接下來(lái)通過(guò)一個(gè)完整的案例來(lái)演示如何定義數(shù)組以及訪問(wèn)數(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]);   //訪問(wèn)數(shù)組第一個(gè)元素
             System.out.println("ids[99]="+ids[99]);//訪問(wèn)數(shù)組最后一個(gè)元素
             System.out.println("==============");
             // 2、第二種方式定義數(shù)組
             String[] names = new String[]{"張三","tom","jack"};  
             System.out.println("names[0]="+names[0]);     //訪問(wèn)數(shù)組第一個(gè)元素
             System.out.println("names[2]="+names[2]);     //訪問(wèn)數(shù)組最后一個(gè)元素
             System.out.println("==============");
             // 3、第三種方式定義數(shù)組
             Object[] object = {"張三","tom","jack"};  
             System.out.println("數(shù)組的長(zhǎng)度為:"+object.length);//獲取數(shù)組的長(zhǎng)度
             System.out.println("object[0]="+object[0]);  //訪問(wèn)數(shù)組第一個(gè)元素
             System.out.println("object[2]="+object[2]);  //訪問(wèn)數(shù)組最后一個(gè)元素
         }
     }

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

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

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

文件1中,分別聲明了一個(gè)int[]類型、String[]類型和Object[]類型的數(shù)組,然后通過(guò)“數(shù)組名[角標(biāo)]”的形式獲取了數(shù)組的第一個(gè)和最后一個(gè)元素值,并打印到控制臺(tái)上。從打印結(jié)果可以看出,第一種定義數(shù)組方式定義的int[]類型的數(shù)組中元素的初始值都為0,這是因?yàn)楫?dāng)數(shù)組被成功創(chuàng)建后,數(shù)組中元素會(huì)被自動(dòng)賦予一個(gè)默認(rèn)值,根據(jù)元素類型的不同,默認(rèn)初始化的值也是不一樣的;而第二種和第三種定義數(shù)組方式定義的數(shù)組都指定了初始值,所以打印出對(duì)應(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 一個(gè)空字符,即’\u0000’
boolean false
引用數(shù)據(jù)類型 null,表示變量不引用任何對(duì)象

在使用數(shù)組時(shí),如果不想使用這些默認(rèn)初始值,可以顯式地為這些元素賦值,當(dāng)然也可以對(duì)定義數(shù)組時(shí)的指定初始值進(jìn)行修改。接下來(lái)對(duì)上面的案例進(jìn)行修改來(lái)學(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]);  //訪問(wèn)數(shù)組第一個(gè)元素
             // 為數(shù)組指定元素進(jìn)行初始化賦值
             ids[0] = 2500;
             System.out.println("ids[0]="+ids[0]); //再次訪問(wèn)數(shù)組第一個(gè)元素
             System.out.println("==============");
             // 2、第二種方式定義數(shù)組
             String[] names = new String[]{"張三","tom","jack"};  
             System.out.println("names[0]="+names[0]);   //訪問(wèn)數(shù)組第一個(gè)元素
             // 為數(shù)組定義時(shí)指定的初始值進(jìn)行修改
             names[0] = "李四";
             System.out.println("names[0]="+names[0]);   //再次訪問(wèn)數(shù)組第一個(gè)元素
             System.out.println("==============");
             // 3、第三種方式定義數(shù)組
             Object[] object = {"張三","tom","jack"};  
             System.out.println("object[0]="+object[0]); //訪問(wèn)數(shù)組第一個(gè)元素
             // 為數(shù)組定義時(shí)指定的初始值進(jìn)行修改
             object[0] = "李四";
             System.out.println("object[0]="+object[0]); //再次訪問(wèn)數(shù)組第一個(gè)元素
         }
     }

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

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

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

注意:

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

文件3 Example20.java

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

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

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

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

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

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

文件4 Example21.java

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

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

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

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




猜你喜歡:

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

Java類的定義格式:Java如何定義一個(gè)類

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

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

0 分享到:
和我們?cè)诰€交談!