Java中的switch语句——通过示例学习Java编程(8)

通过示例学习Java编程(8):Java中的switch语句

作者:CHAITANYA SINGH

来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19

当我们在代码逻辑中有多个选项,而且需要为每个选项执行不同的任务时,我们可以使用switch case语句。

switch case语句的语法看上去如下所示:

switch(变量或整数表达式)

{

     case constant:

     //Java code

     ;

     case constant:

     //Java code

     ;

     default:

     //Java code

     ;

}

注:虽然在switch语句里面的case语句块里面的break语句不是必须要有的,但switch case语句通常还都需要和break语句放在一起使用。我们下面先看一个case语句块里面没有break语句会发生什么的例子,然后我们再进一步讨论如何将switch case和break合在一起使用。

一个简单的switch case实例

public class SwitchCaseExample1 {


   public static void main(String args[]){

     int num=2;

     switch(num+2)

     {

        case1:

          System.out.println("Case1: Value is: "+num);

        case2:

          System.out.println("Case2: Value is: "+num);

        case3:

          System.out.println("Case3: Value is: "+num);

        default:

          System.out.println("Default: Value is: "+num);

      }

   }

}

输出:

Default: Value is: 2

以上代码讲解:在switch后面的括号里面我放了一个表达式(num+2),你也可以只放一个变量,如switch(num)。我们看看switch后面的表达式:num+2,其中num值是2,表达式num+2的结果是4。由于在switch语句块里面的case语句里面只有case 1、case 2、case 3,没有case 4,所以程序就跳过了case 1到case 3的语句,直接执行了最下面的default(默认)语句。上面这个例子说明了在switch case语句中含有default语句的重要性,这样可以确保万一所有的case语句没有匹配到合适的,程序永远可以跳转到default(默认)的代码块去执行。

switch case流程图

switch-case语句的流程逻辑是先评估在switch后面的括号里面的表达式,然后根据这个表达式算出的结果,看看下面的case关键字后面的字符串有没有符合表达式的结果,如果有符合的,就跳到那个符合的case语句去执行,如果一个都没有匹配到,就跳到最下面的default语句去执行。

switch-case里面的break语句

虽然在switch case的代码块里面每一个case里面的break语句不是强制要求的,但几乎所有的switch case代码块里面都会有break语句。在我们讨论break语句之前,先看看下面这个不用switch case里面的break语句:

在switch case语句里面的break语句虽然是可选项,但实际上几乎每次在写switch case语句中都会用到它。在我们讨论break语句之前,我们先看一个没有用到break语句的switch case的例子:

public class SwitchCaseExample2 {


   public static void main(String args[]){

      int i=2;

      switch(i)

      {

         case1:

           System.out.println("Case1 ");

         case2:

           System.out.println("Case2 ");

         case3:

           System.out.println("Case3 ");

         case4:

           System.out.println("Case4 ");

         default:

           System.out.println("Default ");

      }

   }

}

输出:

Case2 

Case3 

Case4 

Default

注意:在上面这个例子里,我们把整数值2赋值给变量i,然后把变量i放到switch后面的括号里面,也就是把整数值2放到switch后面的括号里面,所以当程序执行到语句switch(i)的时候,程序会直接跳到case 2,直接执行case 2下面的语句:System.out.println("Case");,在执行完这个语句后,因为接着的语句中没有break语句,程序继续执行下面的语句,case 3、case 4和default后面的语句,所以在屏幕上会打印出Case2、Case3、Case4和Default四行字,表示这四个语句都执行了。如果我们在执行完case 2后面的语句后,不希望执行case 3和case 4以及default后面的语句,我们可以在这些语句中加上break语句。

当我们希望我们的逻辑流程跳出switch代码块时,就可以用上break语句。每当程序执行到break语句时,都会忽略后面的case语句,直接跳出switch后面的代码块。

我们再看一个例子,这个例子和上面的例子差不多,只是多了break语句。

带break语句的例子:

public class SwitchCaseExample2 {


   public static void main(String args[]){

      int i=2;

      switch(i)

      {

         case1:

           System.out.println("Case1 ");

           break;

         case2:

           System.out.println("Case2 ");

           break;

         case3:

           System.out.println("Case3 ");

           break;

         case4:

           System.out.println("Case4 ");

           break;

         default:

           System.out.println("Default ");

      }

   }

}

输出:

Case2

从这个输出结果可以看出,程序只运行了case 2后面的代码(打印出文字“Case2”),其余的case 3、case 4和default后面的代码都跳过了,没有执行。

为什么在default语句块里面没有用到break语句?

当程序执行到default语句块后,程序本来就会跳出switch代码块,所以在这里加上break语句完全是画蛇添足,没有必要。

使用switch case语句要注意的几个点:

1)case后面的值不一定要是1、2、3之类的顺序数值。如果case后面的数值是一个整数,那么这个数值可以是任何整数,而且也不一定要按照从小到大的顺序排下来。

2)case后面的值也可以是字符或字符串,具体用法见下面的例子:

public class SwitchCaseExample2 {


   public static void main(String args[]){

      char ch='b';

      switch(ch)

      {

         case'd':

           System.out.println("Case1 ");

           break;

         case'b':

           System.out.println("Case2 ");

           break;

         case'x':

           System.out.println("Case3 ");

           break;

         case'y':

           System.out.println("Case4 ");

           break;

         default:

           System.out.println("Default ");

      }

   }

}

3)如果在switch后面的括号里面是一个表达式,那么这个表达式的结果一定要是一个常量,例如:

有效的表达式:

switch(1+2+23)

switch(1*2+3%4)

无效的表达式:

switch(ab+cd)

switch(a+b+c)

4)在switch语句里面可以嵌入switch语句,但这种做法要尽量避免,因为这会让程序看上去更复杂,更难读懂。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339