Java數組的定義,聲明,初始化和遍歷


數組的定義

      數組是相同類型數據的有序集合。數組描述的是相同類型的若干個數據,按照一定的先后次序排列組合而成。其中,每一個數據稱作一個元素,每個元素可以通過一個索引(下標)來訪問它們。數組的三個基本特點:

      1. 長度是確定的。數組一旦被創建,它的大小就是不可以改變的。

      2. 其元素必須是相同類型,不允許出現混合類型。

      3. 數組類型可以是任何數據類型,包括基本類型和引用類型。

 

      數組變量屬引用類型,數組也可以看成是對象,數組中的每個元素相當於該對象的成員變量。數組本身就是對象,Java中對象是在堆中的,因此數組無論保存原始類型還是其他對象類型,數組對象本身是在堆中存儲的。

數組的聲明

     1. 聲明的時候並沒有實例化任何對象,只有在實例化數組對象時,JVM才分配空間,這時才與長度有關。

      2. 聲明一個數組的時候並沒有數組真正被創建。

      3. 構造一個數組,必須指定長度。

 

創建基本類型一維數組 demo:

public class Test { public static void main(String args[]) { int[] s = null; // 聲明數組;
        s = new int[10]; // 給數組分配空間;
        for (int i = 0; i < 10; i++) { s[i] = 2 * i + 1;//給數組元素賦值;
 System.out.println(s[i]); } } }

基本類型數組內存分配圖:

創建引用類型一維數組demo:

class Man{ private int age; private int id; public Man(int id,int age) { super(); this.age = age; this.id = id; } } public class AppMain { public static void main(String[] args) { Man[] mans; //聲明引用類型數組; 
        mans = new Man[10];  //給引用類型數組分配空間;
 Man m1 = new Man(1,11); Man m2 = new Man(2,22); mans[0]=m1;//給引用類型數組元素賦值;
        mans[1]=m2;//給引用類型數組元素賦值;
 } }

引用類型數組內存分配圖:

 

 

數組的初始化:

·靜態初始化:

  除了用new關鍵字來產生數組以外,還可以直接在定義數組的同時就為數組元素分配空間並賦值。

靜態初始化數組 demo:

int[] a = { 1, 2, 3 };// 靜態初始化基本類型數組;
Man[] mans = { new Man(1, 1), new Man(2, 2) };// 靜態初始化引用類型數組;

 

·動態初始化:

  數組定義與為數組元素分配空間並賦值的操作分開進行。

動態初始化數組 demo:

int[] a1 = new int[2];//動態初始化數組,先分配空間;
a1[0]=1;//給數組元素賦值;
a1[1]=2;//給數組元素賦值;

 

·數組的默認初始化:

  數組是引用類型,它的元素相當於類的實例變量,因此數組一經分配空間,其中的每個元素也被按照實例變量同樣的方式被隱式初始化。

默認初始化 demo:

int a2[] = new int[2]; // 默認值:0,0
boolean[] b = new boolean[2]; // 默認值:false,false
String[] s = new String[2]; // 默認值:null, null

 

數組的遍歷:

for循環:

 數組元素下標的合法區間:[0, length-1]。我們可以通過下標來遍歷數組中的元素,遍歷時可以讀取元素的值或者修改元素的值。

數組的遍歷 demo:

public class Test { public static void main(String[] args) { int[] a = new int[4]; //初始化數組元素的值
        for(int i=0;i<a.length;i++){ a[i] = 100*i; } //讀取元素的值
        for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } }

 for-each循環

  增強for循環for-each循環是專門用於讀取數組或集合中所有的元素,即對數組進行遍歷。 for-each增強for循環在遍歷數組過程中不能修改數組中某元素的值。for-each僅適用於遍歷,不涉及有關索引(下標)的操作。

for-each循環的小demo:

public class Test {
    public static void main(String[] args) {
        String[] ss = { "aaa", "bbb", "ccc", "ddd" };
        for (String temp : ss) {
            System.out.println(temp);
        }
    }


/*
輸出結果:

aaa
bbb
ccc
ddd

*/

 

一個綜合的例子:

package cn.ftf.o1; /** * 測試數組 * @author 房廷飛 * */
public class TextArrays { public static void main(String[] args) { int[] arr01=new int[10];//聲明數組和大小,此時是空的
        String[] arr02=new String[4]; //通過遍歷為對象賦值
        for(int i=0;i<arr01.length;i++) { arr01[i]=i*10; } //打印一下
        for(int i=0;i<arr01.length;i++) { System.out.println(arr01[i]); } User[] arr03=new User[3]; //初始化User類型
        arr03[0]=new User(1001,"房廷飛0"); arr03[1]=new User(1002,"房廷飛1"); arr03[2]=new User(1003,"房廷飛2"); //遍歷打印User對象的name
        for(int i=0;i<arr03.length;i++) { System.out.println(arr03[i].getName()); } } } class User{ private int id; private String name; //右鍵自動創建構造器 //右鍵自動生成set,get方法
    public int getId() { return id; } public User(int id, String name) { super(); this.id = id; this.name = name; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

 

2019-03-14    23:36:29    房廷飛        期待明天更好的自己!    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM