switch语法的盲点
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语法的盲点的更多相关文章
- Thymeleaf系列五 迭代,if,switch语法
1. 概述 这里介绍thymeleaf的编程语法,本节主要包括如下内容 迭代语法:th:each; iteration status 条件语法:th:if; th:unless switch语法: ...
- go基础——switch语法
package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...
- switch语法
1. js 代码 // 1. switch 语句也是多分支语句 也可以实现多选1 // 2. 语法结构 switch 转换.开关 case 小例子或者选项的意思 // switch (表达式) { / ...
- switch语法中break,default作用说明
转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...
- switch语法之PHP
$a = 100; switch ($a) { case 100: echo '满分'; break; case $a >=60: echo '及格'; break; }
- if条件和for循环语句、while、do..while、switch语法
//if 语句 ; ) { NSLog(@"不及格"); }) { NSLog(@"及格"); } //if语句 判断条件存在多个情况下,判断一个年是否为润年 ...
- shell中switch语法
转载: https://blog.csdn.net/love__coder/article/details/7262160
- switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...
- go 基础语法
时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int int类型 var a="ds" 默认string类型 a:=&qu ...
随机推荐
- 关于自学C语言开始时应该注意的问题分享—未完待续......
---恢复内容开始--- 自学C语言编程总结 第1章C语言概述 1. 如果用户将主函数的返回值类型定义为了void,则不需要返回任何值: 2. C语言的基本结构包括主函数和程序体两部分 ...
- Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢
第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...
- javaee开发工具及环境配置过程
在配置javaee开发环境的过程中遇到过很多问题,在此系统的整理一下我之前的配置过程 注:配置过程学习自<JSP&Servlet学习笔记(第二版)>详细过程可以阅读此书.在文章的最 ...
- 用 splice 函数分别实现 push、pop、shift、unshift 的方法
主要需要注意的是不同方法他们本身返回的值应该是什么,是数组当前的长度,还是取出的元素的值,再在splice函数里面进行相应的return就可以了.具体如下: 用 splice函数实现 push方法 f ...
- 测试模拟 白屏 / FOUC
白屏和FOUC 白屏与无样式内容闪烁(FOUC)是因为不同浏览器加载与显示页面的机制不同而造成的. 我们可以通过一个实验来进行测试和模拟白屏.FOUC的现象,让我们更好的理解白屏.FOUC. 测试de ...
- 【转载】完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...
- Linux内核设计笔记10——内核同步
Linux内核同步笔记 几个基本概念 - 临界区(critical region):访问和操作共享数据的代码段: - 原子操作:操作在执行中不被打断,要么不执行,要么执行完: - 竞争条件: 两个线程 ...
- Java学习个人备忘录之多线程
进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...
- 常用算法Java实现之选择排序
选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序. 具体流程如下: 1.首先从原数组中选择最小的1个数据,将其置于第一个位置. 2.然后从剩下的数据中再选择其中最小的一个数据,并将 ...
- BluetoothAdapter解析
这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义. 一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 ...