簡體   English   中英

將值設置為對象數組

[英]Setting values to an Array of objects

我正在修訂Java書籍,以確保我對對象和Java基本知識有扎實的理解。 我偶然發現了我正在閱讀的《 Head First:Java 2nd Edition》(2005年)一書中的這段代碼。

 class Book {   

     String title;
     String author; 

 }

 class Main {

    public static void main(String args[]) {    

        int x = 0;      

        Book[] myBooks = new Book[3];
        myBooks[0] = new Book();
        myBooks[1] = new Book();
        myBooks[2] = new Book();
        myBooks[0].title = "Example title xx";
        myBooks[1].title = "Example title cc";
        myBooks[2].title = "Example title yy";
        myBooks[0].author = "Example author xx";
        myBooks[1].author = "Example author cc";
        myBooks[2].author = "Example author yy";    

        while (x < 3) {     

            System.out.print(myBooks[x].title);
            System.out.print(", author ");
            System.out.println(myBooks[x].author);
            x = x + 1;  

        }       
    }   
}

我不太了解myBooks[0].title = "Example title xx"的語法,我承認我對數組及其如何工作還沒有足夠的經驗,但是遍歷數組不是更好的做法並使用setter方法設置所有對象字段?

我認為這里是這種情況

據我有限的理解,這種為這些字段分配值的特定方法與這兩個類的范圍有關。 使用靜態方法的名稱的方式相同,而不是首先創建它們各自類的對象,而是使用靜態變量。

看起來很瑣碎,但對我來說,理解和掌握這個想法非常重要。 希望您能為我解決。

首先,讓我們在不使用數組的情況下重寫程序:

Book myBooks0, myBooks1, myBooks2;
myBooks0 = new Book();
myBooks1 = new Book();
myBooks2 = new Book();
myBooks0.title = "Example title xx";
myBooks1.title = "Example title cc";
myBooks2.title = "Example title yy";
myBooks0.author = "Example author xx";
myBooks1.author = "Example author cc";
myBooks2.author = "Example author yy";  

如果您了解引用cusom類的Java變量,那么這根本就不是謎。

接下來,讓我們回到您的數組:

Book[] myBooks = new Book[3];

它用一個數組變量替換了上面的三個命名變量,所以現在不用編寫myBooksX而是編寫myBooks[X]

這是兩者之間最大的不同。 數組的優點是X可以是變量或整數表達式,其結果為0、1或2,而對於單個變量,數字必須是硬編碼的。

  1.  myBooks[0].title = "Example title xx" 

    將字符串分配給數組中第一個元素的title字段

  2. 遍歷數組並使用setter方法設置所有對象字段不是更好的做法嗎?

    一般來說,是的。

當您使用數組時,您應該了解這個概念。

Book[] mybooks = new Book[3]

這意味着將有一個Book類型的數組。 Book[0]表示,這是對內存中真實對象的引用(就像對該對象的遠程控制一樣)。

因此,當您調用mybook[0].title ,意味着您正在調用Book[0]的標題方法(就像在Book [0]的遙控器上按按鈕標題一樣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM