编程规范
建议在任何情况下(哪怕是只有一个语句)都使用大括号 {} 包裹控制语句块。
例如:
1 | if( true ) { |
原因是,结构更加清晰,后续也更易于维护代码(例如,需要添加代码,直接在 {} 中添加即可)。
条件语句
if-else
switch 一般只用于匹配某个值(可以是 char 、short 、int 、enum 和 String ( JDK 1.7 以后支持) ),而 if-else 还可以用于判断某个范围。例如:
1 | int score = 88; |
switch
可以使用 switch 的地方,都能用 if-else 替代。
switch 的 case 分支如果没有 break ,那么会继续执行下一个 case 分支。
这种情况,我称之为“直通车”,有时候有用,但总觉得太刺激了,尽量少用!
可以在编译的时候,使用 -Xlint:fallthrough 选型来检测。
虽然 default 分支在语法上可有可无,但是,强烈建议,在使用 switch 的时候都保留一个 default ,来处理所有 case 都不满足的情况。
并且,不管 default 放在什么位置,它总是最后一个被执行的。
循环语句
while
while 其实没什么好说的。
它的使用场景主要有:
- 无限循环
while(true),比for(;;)更直观。 - 使用迭代器
Iterator的时候,个人感觉while(iterator.hasNext())比for (Iterator iterator = collection.iterator(); iterator.hasNext();)也要直观一些。
do-while
当你至少需要循环一次,才能确定是否继续的时候,可以考虑使用 do-while 。
for
我觉得使用 for 比使用 while 、do-while 更优雅。
因为它把计数器的初始化,循环条件以及计数器的更新代码都集中在一起,更清晰,也更安全。
因此,对于循环语句,我倾向于使用 for 。
foreach
JDK 1.5 以后,提供了 foreach 的支持。这是一种特殊 for 语法。foreach 相比传统的 for 而言,更简洁,不需要创建额外的变量,一般情况下优先使用它。
需要注意的是:
foreach语句最终会被编译为:java.util.Iterator.hasNext()、java.util.Iterator.next()之类的语句。- 因此,
foreach遍历的顺序也是不可控的。
中断语句
goto
Java 虽然把 goto 定义为保留关键字,但是没有实际使用它。
使用 break 可以实现 goto 类似的功能(只能跳出,不能跳入)。
由于我个人并不习惯这么使用,因此不做说明。
break/continue
break 是彻底跳出当前的循环。continue 则将控制转移到当前循环的起点。
return
return 是当前方法的出口,最后一站。
对于一个方法而言,走到这里,它的任务就算完成了。void 方法也可以使用 return 。
1 | private void returnInVoid() { |