我正在修改我的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方法设置所有对象字段不是更好的做法吗?
我认为的情况是
根据我的有限理解,这种为这些字段分配值的特定方法与这两个类的范围有关。这与使用静态方法的名称相同,而不是首先创建各自类的对象,而是使用静态变量。
这似乎非常微不足道,但对我来说理解和掌握这个想法非常重要。我希望你能为我清理它。
答案 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)
myBooks[0].title = "Example title xx"
会将字符串分配给数组中第一个元素的title
字段
循环使用数组并使用setter方法设置所有对象字段是不是更好的做法?
一般来说是的是。
答案 2 :(得分:1)
当你使用数组时,你应该理解这个概念。
Book[] mybooks = new Book[3]
这意味着Book类型中将有一个数组。 Book[0]
表示,这是对内存中真实对象的引用(就像对象的远程控件一样)。
因此,当您拨打mybook[0].title
时,表示您正在调用Book[0]
的标题方法(就像按下Book [0]遥控器上的按钮标题一样。