switch语法在项目使用的频率很低,今天看到一个相关的例子引发一些思考,,同时自己也写了一些简单的例子如下:

实例1:

int dayOfWeek = 5;
switch (dayOfWeek){
default:
System.out.println("default");
case 1:
System.out.println("1111");
case 2:
System.out.println("2222");
case 4:
System.out.println("3333");
}

  运行结果:

default
1111
2222
3333

  实例2:

int dayOfWeek = 5;
switch (dayOfWeek){
default:
System.out.println("default");
case 1:
System.out.println("1111");
case 2:
System.out.println("2222");
//diff
case 5:
System.out.println("3333");
}

  运行结果:

3333

  实例3:

int dayOfWeek = 5;
switch (dayOfWeek){
case 1:
System.out.println("1111");
//diff
case 5:
System.out.println("5555");
case 2:
System.out.println("2222");
default:
System.out.println("default"); }

  运行结果:

5555
2222
default

  为了弄清楚这是怎么回事,首先从JDK文档入手。从文档可以了解一下几点。

https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11

1.如果switch表达式中的值与case常量其中一个相等,可以说与case的标签是匹配的,在switch块中,在当前匹配的case的后面的语句,不管是否匹配都将会执行。
2.如果没有与case标签相匹配的,但是存在default标签,在switch块中,default以及default后面的语句都将会顺序执行。
3.既没有case标签匹配也没有default标签,switch中的语句将不会执行。

实例1对应情况是2,实例3对应情况3.

如何来避免这种情况?使用break。

继续看一下其他语言的情况。

一、JavaScript

var dayOfWeek = 5
switch (dayOfWeek){
default:
console.log("default javascript")
case 1:
console.log("1111")
case 2:
console.log("2222")
case 4:
console.log("4444")
}

  运行结果:

default javascript
1111
2222
4444

  

var dayOfWeek = 2
switch (dayOfWeek){ case 1:
console.log("1111")
case 2:
console.log("2222")
case 4:
console.log("4444")
default:
console.log("default javascript")
}

  运行结果:

2222
4444
default javascript

  二、C

int day_week = 5;
switch(day_week){
default : printf("%s\n", "default c");
case 1: printf("%s\n", "1111");
case 2: printf("%s\n", "2222");
case 3: printf("%s\n", "3333"); }

  运行结果:

default c
1111
2222
3333

  

int day_week = 2;
switch(day_week){
case 1: printf("%s\n", "1111");
case 2: printf("%s\n", "2222");
case 3: printf("%s\n", "3333");
default : printf("%s\n", "default c");
}

  运行结果:

2222
3333
default c

  三、Python并没有switch

Why isn’t there a switch or case statement in Python?

You can do this easily enough with a sequence of if... elif... elif... else. There have been some proposals for switch statement syntax, but there is no consensus (yet) on whether and how to do range tests. See PEP 275 for complete details and the current status.

链接https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

总结

  这些语言对switch的词法分析都是一样的。switch这东西用的少,但是用的时候不要忘了break。

  

switch语法的盲点的更多相关文章

  1. Thymeleaf系列五 迭代,if,switch语法

      1. 概述 这里介绍thymeleaf的编程语法,本节主要包括如下内容 迭代语法:th:each; iteration status 条件语法:th:if; th:unless switch语法: ...

  2. go基础——switch语法

    package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...

  3. switch语法

    1. js 代码 // 1. switch 语句也是多分支语句 也可以实现多选1 // 2. 语法结构 switch 转换.开关 case 小例子或者选项的意思 // switch (表达式) { / ...

  4. switch语法中break,default作用说明

    转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...

  5. switch语法之PHP

    $a = 100; switch ($a) { case 100: echo '满分'; break; case $a >=60: echo '及格'; break; }

  6. if条件和for循环语句、while、do..while、switch语法

    //if 语句 ; ) { NSLog(@"不及格"); }) { NSLog(@"及格"); } //if语句 判断条件存在多个情况下,判断一个年是否为润年 ...

  7. shell中switch语法

    转载: https://blog.csdn.net/love__coder/article/details/7262160

  8. switch语句下的变量声明和定义

    switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...

  9. go 基础语法

    时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int    int类型 var a="ds"   默认string类型 a:=&qu ...

随机推荐

  1. TPO-14 C2 Prepare for a career in journalism

    TPO-14 C2 Prepare for a career in journalism 第 1 段 1.Listen to a conversation between a student and ...

  2. Android softkeyboard 和 其他界面关系 softInputMode

    转 : http://blog.csdn.net/xww810319/article/details/17397429 and http://blog.csdn.net/harryweasley/ar ...

  3. TW实习日记:第31-32天

    不知不觉的,实习的净工作天数,已经都超过一个月了.因为对工作内容不是很满意,所以打算月底离职,也不知道是公司太缺人还是我真的能干活,领导竟然三番两次找我让我再考虑...明天又要找我了,哎...随机应变 ...

  4. Python3 异常与断言

    1.异常 当出现错误时,程序就会发生异常 num1=input('Please input a num1: ') num2=input('Please input a num2: ') print(f ...

  5. 2.重新安装CM服务

    步骤1.停止CM服务2.删除CM服务3.添加CM服务4.测试数据库 步骤 1.停止CM服务 2.删除CM服务 没有发现可以单独删除某一项CM服务,必须全部删除 3.添加CM服务 4.测试数据库 如果报 ...

  6. c# throw抛出上一个异常

    catch(exception e) { throw; } 不仅抛出这次的异常,也抛出之前的异常. 用法示例:函数A调用函数B,A用到此throw时,B中发生的异常也会继承过来. catch(exce ...

  7. 哈希表 STL map

    计数排序时我们使用一个数组来记录出现的数字的次数,而当数据范围太大时,无法建立一个那么大地数组(而且可能空间利用率很低,太浪费),此时可以改用hash table . binary search tr ...

  8. js 拼接字符串时,本来想要’#1′ ,返回的却是’#01′

    今天在操作一个元素时,id值是拼接的. var index = $(this).attr(‘index’);    //0var id = ‘#’ + (index+1);    //#01$(id) ...

  9. <Effective C++>读书摘要--Templates and Generic Programming<一>

    1.The initial motivation for C++ templates was straightforward: to make it possible to create type-s ...

  10. Hive整体优化策略

    一 整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez.Spark等.根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点: 1 根据 ...