循环执行 | page 17 of 37 |
Java(TM) 提供了 while, do-while, 和 for 语言结构来循环多次执行一个语句(或语句组)。while 是一种更常用的循环结构;for 则语法功能更强大。
循环结构 |
while (<布尔表达式>) <语句组>... |
do <语句组>... while (<布尔表达式>) |
for (<初始条件>...; <布尔表达式>; <循环过程表达式>...) <语句>... |
有了循环,我们就可以让我们的狗叫个不停,令我们的邻居很沮丧:
void bark(int times) {
while (times > 0) {
System.out.println(barkSound);
times = times - 1;
}
}
因此,用另一个 bark() 方法,我们可以支持面向对象的任务:向 Dog 的实例发送一个 bark 消息,该消息用方法定义中的 times 参数来反映消息请求 n 次叫声(bark)。
DogChorus 现在真的名符其实了:
public class DogChorus {
public static void main(String[] args) {
Dog fido = new Dog();
Dog spot = new Dog();
spot.setBark("Arf. Arf.");
fido.bark();
spot.bark();
fido.bark(4);
spot.bark(3);
new Dog().bark(4); // unknown dog
System.exit(0);
}
}
现在 DogChorus 的输出为:
Woof.
Arf. Arf.
Woof.
Woof.
Woof.
Woof.
Arf. Arf.
Arf. Arf.
Arf. Arf.
Woof.
Woof.
Woof.
Woof.
请注意程序中带注释"// unknown dog"的那行代码。正如前面讲到的,Java 是一门动态语言,此例又说明了这点。一只"未命名"被初始化了的 Dog 凭空出现(突然从天而降)加入合唱,然后无隐无踪。
也就是说,在 Java 中,我们可以随意创建类的实例,并直接使用,而不必将之赋值给一个为了将来的使用而设的引用变量(只要我们将来不需用到它)。而且,按 Java 的语法和"new <data-type>()" 的求值次序规则,我们不必将 new 操作用"()"括起来就可以实现这点。