将值设置为对象数组

时间:2015-03-29 11:32:19

标签: java arrays object

我正在修改我的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方法设置所有对象字段不是更好的做法吗?

我认为的情况是

根据我的有限理解,这种为这些字段分配值的特定方法与这两个类的范围有关。这与使用静态方法的名称相同,而不是首先创建各自类的对象,而是使用静态变量。

这似乎非常微不足道,但对我来说理解和掌握这个想法非常重要。我希望你能为我清理它。

3 个答案:

答案 0 :(得分:3)

首先,让我们在没有数组的情况下重写您的程序:

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 :(得分:1)

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

    会将字符串分配给数组中第一个元素的title字段

  2. 循环使用数组并使用setter方法设置所有对象字段是不是更好的做法?

    一般来说是的是。

答案 2 :(得分:1)

当你使用数组时,你应该理解这个概念。

Book[] mybooks = new Book[3]

这意味着Book类型中将有一个数组。 Book[0]表示,这是对内存中真实对象的引用(就像对象的远程控件一样)。

因此,当您拨打mybook[0].title时,表示您正在调用Book[0]的标题方法(就像按下Book [0]遥控器上的按钮标题一样。