记得第一次学switch的时候那是还是学习c语言的时候,整体的写if-else,switch,现在回想起来已经是很多年前的事了,好了今天让我们再来回顾下简单的switch

语法

switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
n 与 case 1 和 case 2 不同时执行的代码
}

格式解释说明

switch表达式:可以是byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断,跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

工作原理

A:首先设置表达式 n(通常是一个变量)
B:随后表达式的值会与结构中的每个 case 的值做比较,如果有就执行对应的语句体,看到break就结束。
C:如果没有匹配,就执行default的语句体。

注意事项

A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的值
B:default可以省略吗?
  可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
C:break可以省略吗?
  可以省略,但是结果可能不是我们想要的。
  会出现一个现象:case穿透,最终我们建议不要省略
D:default一定要在最后吗?

  不是,可以在任意位置。但是建议在最后。

E:switch语句的结束条件

  a:遇到break就结束了
  b:执行到末尾就结束了

Case案例演示

public static void main(String[] args)
{
case1(); System.out.println("----------case1------------"); case2(); System.out.println("----------case2------------"); case3(); System.out.println("----------case3------------"); case4(); System.out.println("----------case4------------"); case4_0(); System.out.println("----------case4_0------------"); case4_1(); System.out.println("----------case4_1------------"); case5(); System.out.println("-----------case5-----------"); case6(); System.out.println("-----------case6-----------");
}
private static void case1()
{
switch(NUMBER){
case 9:
System.out.println(9);
break;
case 10:
System.out.println(10);
break;
case 11:
System.out.println(11);
break;
default:
System.out.println("都不匹配");
}
} private static void case2()
{
switch(NUMBER){
case 9:
System.out.println(9);
case 10:
System.out.println(10);
case 11:
System.out.println(11);
default:
System.out.println("都不匹配");
}
} private static void case3()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
break; //break有无不影响结果
case 9:
System.out.println(9);
break;
case 10:
System.out.println(10);
break;
case 11:
System.out.println(11);
break;
}
} private static void case4()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
case 9:
System.out.println(9);
case 12:
System.out.println(12);
case 11:
System.out.println(11);
}
} private static void case4_0()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
break; //和case4 比较 是有区别的
case 9:
System.out.println(9);
case 12:
System.out.println(12);
case 11:
System.out.println(11);
}
} private static void case4_1()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
case 9:
System.out.println(9);
case 10:
System.out.println(10);
case 11:
System.out.println(11);
}
} private static void case5()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
case 9:
System.out.println(9);
break;
case 12:
System.out.println(12);
break;
case 11:
System.out.println(11);
break;
}
} private static void case6()
{
switch(NUMBER){
default:
System.out.println("都不匹配");
break; //case5 比较 是有区别的
case 9:
System.out.println(9);
break;
case 12:
System.out.println(12);
break;
case 11:
System.out.println(11);
break;
}
}

执行结果

10
----------case1------------
10
11
都不匹配
----------case2------------
10
----------case3------------
都不匹配
9
12
11
----------case4------------
都不匹配
----------case4_0------------
10
11
----------case4_1------------
都不匹配
9
-----------case5-----------
都不匹配
-----------case6-----------

总结:

case穿透和break有关,只有当遇到break时才会终止,不然会继续执行后面case中的代码块

default的位置不会影响执行结果,不管你编写的代码中default放在那里,这里的条件判断都是先按顺序比较其他非default值,当这些条件都不满足的时候,才跳转到default的相应代码处执行。

switch表达式、case穿透的更多相关文章

  1. 标准的Switch语句和穿透的Switch语句

    第三章 选择语句 3.1选择语句--Switch switch语句格式: ```java switch(表达式){ case 常量值1: 语句体1; break; case 常量值2: 语句体2; b ...

  2. Switch语句的case穿透

    Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...

  3. php中switch语句case后表达式写法记录一

    可作等级评价: $var = 95; switch(true){ case $var < 100; $level = 1; break; case $var < 95; $level = ...

  4. js switch表达式的例子

    switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰.  前言 switch 这种表达式在很多语言中都有,比如java, C等待 ...

  5. 尝鲜Java 12新特性:switch表达式

    Java 12将在两个月后(2019/3/19)发布,现已进入RDP1阶段,确定加入8个JEP.其中对Java语法的改进是JEP 325: switch表达式.于是我迫不及待,提前感受一下更先进的语言 ...

  6. Java12新特性 -- switch表达式

    传统switch表达式的弊端: 匹配是自上而下的,如果忘记写break, 后面的case语句不论匹配与否都会执行: 所有的case语句共用一个块范围,在不同的case语句定义的变量名不能重复: 不能在 ...

  7. Java基础 switch 表达式为字符串

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  8. switch表达式为字符串

    package EXERCISE; import java.util.*; public class HashCode { //switch判断字符串.switch表达式byte,short,int, ...

  9. 详解Java12新增语法switch表达式

    引言 在学习分支语句的时候,我们都学过 switch 语句,相比于 if-else 语句,他看起来更加整洁,逻辑更加清晰,Java中当然也给我们提了相关的 switch 方法.但是Java的强大之处在 ...

随机推荐

  1. ZSTU4266 回文 2017-03-22 14:25 55人阅读 评论(0) 收藏

    4266: 回文 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1636  Solved: 504 Description 小王想知道一个字符串是否为 ...

  2. B-spline Curves 学习之B样条曲线定义(4)

    B-spline Curves: Definition 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:h ...

  3. 使用 log4j 打印日志

    开发阶段:发现程序的问题,排错 产品阶段:记录程序运行的状况 Maven中配置依赖 通过配置文件输出日志的格式,输送的位置等 一.入门实例 1.新建一个JAva工程,导入包log4j-1.2.17.j ...

  4. 修改VS中的附加依赖项的继承值

    工程用不到的库,想去都去不掉,一直链接错误... 解决方法:打开vs的“属性管理器”窗口.通过这个窗口就可以对里面的继承值进行编辑了 另,“属性管理器”这个窗口,一般在“其他窗口”选项里(至少VS20 ...

  5. Spring学习(六)——集成memcached客户端

    memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据 ...

  6. .net core 使用 redis

    .net core 使用 redis 个人感觉.net core 对于微软技术而言有很重要的意义 ,所以最近已有时间就想看一看关于.net core 的文章. 今天我就来写一写如何在.net core ...

  7. 解决“找不到请求的 .Net Framework Data Provider。可能没有安装.”错误

    问题: 这几天在装.NET 的开发环境,在装好VS2013和Oracle 11g之后,做了一个测试项目,运行调试没问题 但是涉及到数据库相关操作,如新建数据集.连接数据库等在调试的时候则会出现如下错误 ...

  8. ADO.NET操作PostgreSQL:数据库操作类(未封装)

    1.添加 /// <summary> /// 添加 /// </summary> /// <param name="newEntity">< ...

  9. ASP.NET MVC 防止CSRF攻击

    简介 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cr ...

  10. Visual Studio 2017 如何 监控当前变量 占用内存空间大小

    在进行VS调试时 大家是否想知道当前变量 占用了内存多少空间呢 这对系统调优还是很有帮助的吧