黑马程序员技术交流社区

标题: 请问这个 Switch语句 问题 [打印本页]

作者: 天山    时间: 2014-4-23 09:02
标题: 请问这个 Switch语句 问题
public class Server {

                public static void main(String []args){
               
                       
                       
                        int x=1;
                       
                        switch(x)
                        {
                        default:       //冒号
                        System.out.println("d");
                        //break;
                        case 100:                                //为什么 不满足条件case 4 还打印出来了 aaaa
                                {System.out.println("aaaa");
                                break;}
                       
                        case 6:
                                {System.out.println("b");
                                break;}
                               
                        case 7:
                                {System.out.println("c");
                                break;}
                       
                        }
                                                       
                }       
}

打印结果
  d
aaaa
作者: 老貓钓鱼    时间: 2014-4-23 09:06
因为你把break注释了,话说你把default: 放在了最前面,很是新颖

switch (表达式){
case 值1 : 语句1
break;

case 值2 : 语句2
break;

...
default : 语句n
break;
}

从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的第一个语句继续执行,并忽略其他case。
假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。
假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。
作者: 雪碧拌米饭    时间: 2014-4-23 09:07
本帖最后由 雪碧拌米饭 于 2014-4-23 09:11 编辑

因为你把第一个break语句注释掉了,这样他就会在执行完default的语句后继续执行case100的语句。
作者: idream    时间: 2014-4-23 13:56
看图解

图解.png (68.36 KB, 下载次数: 29)

图解.png

作者: 秦久启    时间: 2014-4-23 14:11
switch (表达式){
case 值1 : 语句1
break;

case 值2 : 语句2
break;

...
default : 语句n
break;
}
switch语句特点:
a,  switch语句选择的类型只有四种:byte,short,int ,char。之后枚举也是可以的了,在jdk7.0之后也可以用字符串的类型了,其实底层用的也是int类型的,因为是将字符串变成了hashCode()的类型。所以也就是说变成了int类型的了。




b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。



c,结束switch语句的两种情况:遇到break,执行到switch语句结束。



d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。






作者: 清风夜独醉    时间: 2014-4-24 00:32
相当于default和case 100  是一个条件,满足了default就会执行到break为止,所以会出现这样的结果
作者: ﹊佑雨时杰↘    时间: 2014-4-24 05:11
1.default就是如果没有符合的case就执行它,default并不是必须的.
2.case后的语句可以不用大括号.
3.switch语句的判断条件可以接受int,byte,char,short,枚举,不能接受其他类型.
4.在都没有break 语句的情况下:

首先会在所有的case 语句中,寻找满足条件的语句。如果找到,会从该语句顺序向下执行每个语句;若找不到,会从第一段开始,向下顺序执行每一段语句。

在有break 语句的情况下:
· 找到一个满足条件的case 语句执行,若找不到,会执行default 的语句。
作者: 诺忔。初禾、    时间: 2014-4-24 08:59
因为你default后面的break给注释了
作者: skill20    时间: 2014-4-24 09:56
[code]switch (表达式){
case 值1 : 语句1
break;

case 值2 : 语句2
break;

...
default : 语句n
break;
}  
无论case在什么位置,先执行与之匹配的case,如果没有匹配的case,就会执行default,执行完后,没有遇到break 或 } 会不判断case继续向下执行,直到结束。

作者: 心?=忐§忑]    时间: 2014-4-24 10:26
  1. <p>public class Demo8 {
  2.         public static void main(String []args){
  3.                 int x=1;
  4.                 switch(x)
  5.                 {
  6.                 default:       //冒号<font color="red">    没有找到匹配的case语句,执行此句</font>
  7.                     System.out.println("d");
  8.                     // break;    <font color="red">这儿的break;语句没有起到作用,所以继续向下执行case100语句</font>
  9.                 case 100:   //为什么 不满足条件case 4 还打印出来了 aaaa
  10.                         {System.out.println("aaaa");
  11.                         break;}
  12.                
  13.                 case 6:
  14.                         {System.out.println("b");
  15.                         break;}
  16.                         
  17.                 case 7:
  18.                         {System.out.println("c");
  19.                         break;}
  20.                               
  21.                 }                                    
  22.         }        
  23. }</p>
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2