这次是把java中常用的一个控制语句switch使用时出现的错误做个小结。
一 defult的用法
/*************************************************
* defult是说当其他项匹配不到的时候,就会默认选择这一项
* 而不是说会首先或者第一个选择它对应的项
*************************************************/
public static void defult_test(char a){
switch (a) {
case 'A':
System.out.println("我是A");
break;
case 'B':
System.out.println("我是B");
break;
case 'C':
System.out.println("我是C");
break;
default:
System.out.println("我什么也不是");
break;
}
}
调用:
defult_test('A');
System.out.println("-----------------------");
defult_test('D');
输出结果:
我是A
-----------------------
我什么也不是
这样我们就明白了,原来和defult的位置无关的。
二 break容易漏
这个错误应当是刚学习时候容易反的错误,也是我们做练习题时容易考到的知识。如果有case项没有加break那么,当如果程序匹配到了这个case项,运行完这段case的内容后,仍然会向下执行,直到遇到下一个break或者是switch程序的结尾。但是如果这段程序有defult的话,是比较例外的情况,只要有case匹配到,defult就不会执行。
/***********************************************
* break漏写也是大家容易犯的错误,如果一个匹配项执行
* 结束之后没有break,程序就会一直执行到下一个break
* 或者是到这段程序的结束
***********************************************/
public static void break_test(char a){
switch (a) {
case 'A':
System.out.println("我是A");
// break;
case 'B':
System.out.println("我是B");
break;
case 'C':
System.out.println("我是C");
break;
default:
System.out.println("我什么也不是");
// break;
case 'D':
System.out.println("我是D");
}
}
调用:
break_test('A');
System.out.println("-----------------------");
break_test('D');
输出结果:
我是A
我是B
-----------------------
我是D
从这里我们看到 'A’后面的break被注释掉了,所以当匹配到A时候会,执行完这段case的代码块后,仍然执行B得了,知道B的break才结束。
而当我们给D参数的时候,尽管他没有break但是仍然不会去匹配defult。
三 switch(key) key的类型
byte,int,short,char是可以作为key表达式的类型的,jdk1.5 以后enum类型也是可以作为key表达式的类型的。而long,double,float,还有其他类是不可以作为key表达式的类型的。我们知道string从前是也是不行的,可是jdk1.7之后就开始支持string的表达式了。
也就是说jdk1.7之后我们也是用string作为case判断的表达式了,这一点也在jdk1.7新特性中。
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309365