流程控制陷阱(Switch语句,标签,if语句,for循环,foreach循环的循环计数器)

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值