1. 流程控制的陷阱
1.1 Switch语句陷阱
Switch语句后可以指定一个表达式,系统根据表达式的值来决定执行哪个case分支的执行体。对于switch语句的表达式而言,只能是如下5种数据类型。
byte(字节整型),short(短整型),int(整型),char(字符型),enum(JDK1.5之后可以使用枚举型)。
绝不能是String类型,也不能是long,float,double等其它类型。
Eg:int a=5;switch(a+1.0) 是错误的,因为a+1.0表达式的类型自动提升为double类型。
枚举类型举例
enum Season { SPRING, SUMMER, FALL, WINTER } public class EnumSwitch_lyf { public static void main(String[] args) { Season s = Season.FALL; switch (s) { case FALL: System.out.println("秋天"); break; case SUMMER: System.out.println("夏天"); break; case WINTER: System.out.println("冬天"); break; case SPRING: System.out.println("春天"); break; default: System.out.println("其他"); } } }
枚举类型使用时需要注意:
程序在case分支中访问枚举值时不能使用枚举类名作为限定,在其他地方使用enum值时,通常应该使用枚举类名作为限定。
1.2 标签引起的陷阱
Java语句的标签是一个怪胎:它主要是为C语言中的goto语句而创建,但java程序中根本没有goto语句。虽然java一直将goto作为保留字,但估计java也没有引入goto语句的打算。因为java的标签一般都没有太大的作用。
1.3 If语句的陷阱
使用if……else语句有一条基本规则:先处理范围小的,在处理范围大的。如果先处理范围大的条件,接下来的情况是拿“后处理的小范围”与“else隐含条件:刨除大范围的小范围”计算交集,两个小范围求交集就很难有交集了,这将导致后处理的分支永远不会获得执行的机会。
1.4 for循环的陷阱
根据java语言规范:for循环里有且只有2个分号作为分隔符,第一个分号之前是初始化条件,两个分号之间是一个返回boolean的逻辑表达式,当它返回true是for循环才会执行下一次循环;第二个分号之后的循环迭代部分,每次循环结束之后会执行的循环迭代部分。
for (int j = 1, i = 0; i < 5 && j < 20; i++, j *= 2) {
System.out.println("someting");}
1.5 foreach循环的循环计数器
foreach(type tempVariable : array|collection){}
tempVariable:是一个形参名,foreach循环自动将那个数组元素、集合元素依次赋给该变量。
当使用foreach循环来迭代输出数组元素或集合元素时,系统将数组元素、集合元素的副本传给循环计数器,即foreach循环中的循环计数器并不是数组元素、集合元素本身,因此通常不要对tempVariable赋值,虽然赋值语法上被允许,但是没有太大的意义,而且极容易出现错误。
public static void main(String[] args) {
String[] names = { "liyafang", "zhoushilong", "luorongbo" };
for (String temp : names) {
temp = "shining";//并不会修改names中的内容
System.out.println(temp);
}
for (String temp : names) {
System.out.println(temp);
}
}
输出结果:
shining
shining
shining
liyafang
zhoushilong
luorongbo
流程控制陷阱(Switch语句,标签,if语句,for循环,foreach循环的循环计数器)
最新推荐文章于 2023-10-05 14:13:24 发布