编程规范
建议在任何情况下(哪怕是只有一个语句)都使用大括号 {}
包裹控制语句块。
例如:
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() { |