Thinking in java 第四章 - 控制执行流程
就像有知觉的生物一样,程序必须在执行过程中控制它的世界,并做出选择。在Java中,你要使用执行控制语句来做出选择。
在Java中,仍然可以进行类似goto那样的跳转,但比起典型的goto,有了很多限制。
1 true 和 false
注意Java不允许我们将一个数字作为布尔值使用,虽然这在C/C++里是允许的。
2 if - else
3 迭代
3.1 do-while
3.2 for
注意,变量c是在程序用到它的地方被定义的,也就是在for循环的控制表达式里,而不是在main() 开始的地方定义的。c的作用域就是for 控制的表达式的范围内。
3.3 逗号运算符
逗号操作符(注意不是逗号分隔符,逗号用作分隔符时用来分隔函数的不同参数),Java里唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句;而那些语句均会独立执行。
通过使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型。
for循环在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。
4 Foreach语法
用于数组和容器。并且,foreach还可以用于任何Iterable对象。
foreach语法不仅在录入代码时可以节省时间,更重要的是,它阅读起来也要容易得多,它说明你正在努力做什么(例如获取数组中的每一个元素),而不是给出你正在如何做的细节(例如正在创建索引,因此可以使用它来选取数组中的每一个元素)。
5 return
如果一个方法声明它将返回void之外的其他东西,那么必须确保每一条代码路径都将返回一个值。
6 break 和 continue
无穷循环while(true)和for( ; ;)
7 臭名昭著的goto
Java编译器生成它自己的“汇编代码”,但是这个代码是运行在Java虚拟机上的,而不是直接运行在CPU硬件上。
goto语句是在源码级上的跳转,这使其招致了不好的声誉。
尽管goto 仍是Java中的一个保留字,但在语言中并未使用它;Java没有goto 。然而,Java也能完成一些类似于跳转的操作,这与break和continue这两个关键词有关。它们其实不是一个跳转,而是中断迭代语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。
标签是后面跟有冒号的标识符。
在Java中,标签起作用的唯一的地方刚好是在迭代语句之前。“刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。
lable1:
outer-iteration{
inner-iteration{
//...
break;
//...
continue;
//...
continue label1;
//...
break lable1;
}
}
如果没有break outer语句,就没有办法从内部循环里跳出外部循环。这是由于break本身只能中断最内层的循环(continue也是同样如此)。
要记住的重点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break和continue。
有趣的现象:通过限制语言的能力,反而能使一项语言特性更加有用。
8 switch
SE5之前必须是int或者char,SE5的新特性enum
9 总结
略