流程控制的陷阱
switch语句方面的陷阱
default语句会永远执行吗?
不会
switch 语句之后可以包含一个default分支。从字面意义上看,这个分支是默认分支,似乎是无条件执行的分支,实际上不是。default分支的潜在条件是,表达式的值与前面分支的值都不相等。也就是说,在正常情况下,只有当switch语句的前面分支没有获得执行时,default分支才会获得执行的机会
break的重要性
在case分支后的每个代码块后都有一条break;语句,这个break;语句有极其重要的意义:用于终止当前分支的执行体。如果某个case分支之后没有使用break;来终止这个分支的执行体,即使使用花括号来包围该分支的执行体也是无效的。Java一旦找到匹配的case分支(表达式的值与case后的值相等),程序就开始执行这个case分支的执行体,不再判断与后面case,default标签的条件是否匹配,除非遇到break;才会结束该执行体。
Java7增强的switch表达式
在Java7以前,switch语句的表达式只能是如下5种数据类型。
》byte:字节整型。
》short:短整型。
》int:整型
》char:字符型。
》enum:枚举型。从Java7开始,switch表达式的类型可以是String类型,但不能是long、float、double其他基本类型。
循环体的花括号
什么时候可以省略花括号?
在最极端的情况下,即使循环体只有一条语句,依然不能省略循环体的花括号,
省略了花括号的危险
这个错误提示甚至没有提供太多有效的信息。为什么会发生这样的情况?这是因为Java语言规定:
for、while或do循环中的重复执行语句不能是一条单独的局部变量定义语句;
如果程序要使用循环来重复定义局部变量,这条局部变量定义语句必须放在花括号内才有效。还有
浮点数不能作为循环计数器
foreach循环里不要对循环变量(即数组里的元素)进行赋值