java中switch case语句需要加入break的原因解析

java 中使用switch case语句需要加入break 做了具体的实例分析,及编译源码,在源码中分析应该如何使用,大家可以参考下:

假设我们有如下这样一个switch语句:

public static void test(int index) {

switch (index) {

case 1:

System.out.println(1);

case 2:

System.out.println(2);

case 3:

System.out.println(3);

default:

System.out.println("Default");

}

}

当我们在执行上面的方法时,如果我们传入的参数是1,那么会输出1、2、3和default,如果传入的参数是2,那么会输出2、3和default,这是为什么呢?这是因为switch的case语句是用来根据满足条件从确定的行开始执行的,如果不加入break语句跳出switch逻辑,则会一直往下执行,这也是为什么上面的测试代码会出现传入参数为2时会输出2、3和default。

为此,我们也可以看一下上面的代码编译后的class文件,通过eclipse打开后,我们可以看到如下内容:

public static void test(int index);

iload_0 [index]

tableswitch default: 49

case 1: 28

case 2: 35

case 3: 42

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_1

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_2

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_3

invokevirtual java.io.PrintStream.println(int) : void [28]

getstatic java.lang.System.out : java.io.PrintStream [22]

ldc [33]

invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]

return

上面编译后的语句每行前面的数字是程序的指定序号,我们可以把它简单的理解为行号,我们可以看到数字为1的那行定义了一个switch指定,其默认会跳到49行,如果传入的参数是1则跳到28行执行,如果是2则跳到35行执行,如果是3则跳到42行执行。那么我们先来看程序的第28行到32行,其对应的就是调用System.out.println输出1,完了后没有特殊的指令,程序是会继续顺序执行的,也就是会依次执行35、38、直到57行结束。

如果我们把源程序的case语句末端都加上break语句,如下这样:

public static void test(int index) {

switch (index) {

case 1:

System.out.println(1);

break;

case 2:

System.out.println(2);

break;

case 3:

System.out.println(3);

break;

default:

System.out.println("Default");

break;

}

}

那么对应的编译的class文件通过Eclipse打开后可以看到如下内容:

public static void test(int index);

iload_0 [index]

tableswitch default: 58

case 1: 28

case 2: 38

case 3: 48

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_1

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_2

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

iconst_3

invokevirtual java.io.PrintStream.println(int) : void [28]

goto 66

getstatic java.lang.System.out : java.io.PrintStream [22]

ldc [33]

invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]

return

我们可以看到switch语句默认会执行58行,如果传入的参数是1则会执行28行,如果是2则会从38行开始执行,接着我们可以看到28行开始是执行的System.out.println(1)的逻辑,完了后会顺序执行到35行,35行的指令是会引导程序执行到第66行,也就是跳出了switch逻辑,对应我们的测试代码就是程序结束了。这也是为什么我们在使用switch语句时通常需要在每个case语句结束时加入break指令的原因。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java break在switch_java中switch case语句需要加入break的原因解析相关推荐

  1. java case switch面试_Java基础篇——Java中switch case语句用法及注意事项面试题9期

    本文主要说一说关于switch case语句用法及注意事项,应对面试官的提问.希望可以帮助那些对switch存在错误和各种细节问题的"码友". switch-case注意事项 sw ...

  2. c语言 case break,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  3. 从零学Java(20)之switch case语句,小AD变身中路城管大队!

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  4. c语言 case语句用法,switch ... case语句的用法[组图]

    switch ... case语句的用法[组图] 08-13栏目:技术 TAG:switch case语句 switch case语句 当情况大于或等于4种的时候就用switch ...  case语 ...

  5. java的case_java中的switch case语句使用详解

    java中的switch case语句 switch-case语句格式如下: switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; .. ...

  6. java switch case语句_在Java中使用switch Case语句的例子

    当我们有多个选项,并且需要为每个选项执行不同的任务时,就需要使用Switch case语句. Switch case语句的语法如下-switch (variable or an integer exp ...

  7. java中switchcase用法,java中的switch case语句使用详解

    java中的switch case语句 switch-case语句格式如下: ? swtich()变量类型只能是int.short.char.byte和enum类型(JDK 1.7 之后,类型也可以是 ...

  8. C语言switch中break的作用,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  9. Java switch case 语句

    什么是switch case? switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. switch的语法 switch case 语句语法格式如下: switch( ...

最新文章

  1. learning to rank_排序
  2. Google 超分辨率技术 RAISR:模糊图片瞬间变清晰,运算速度快十倍
  3. [MySQL] 为什么要给表加上主键
  4. win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题
  5. IT项目的面向对象分析设计、开发及管理
  6. 实训说明书 在线音乐平台项目规格说明书
  7. 分离圆环图显示百分比_Tableau制作圆环图
  8. 钉钉宣布品牌全新升级 首次明确回答了自身和生态的关系
  9. 写给MongoDB开发者的50条建议Tip14
  10. cvCreateStructuringElementEx理解
  11. git_day03_01——git远程仓库的使用
  12. day25-python之继承组合
  13. uniapp ucharts统计图表
  14. 回归中的相关系数以及R平方值和Python应用举例
  15. 软件项目管理第五章笔记---项目成本管理
  16. 做了一个app,返回三国武将的排序网页,记录一下,省得以后找不到
  17. 使用花生壳配置内网穿透
  18. python控制其它软件_python——实现ERP软件自动化操作
  19. 服务器虚拟内存开机就90%,电脑开机物理内存就占了百分之90 为什么啊。
  20. Excel常用公式和技巧

热门文章

  1. Java中数组的length属性
  2. 面试题整理18 根据上排给出十个数,在其下排填出对应的十个数
  3. 用CMake编译运行在网上下载的源文件src
  4. 图解Android Studio 2.0安装步骤
  5. [Machine Learning] Random Forest 随机森林
  6. fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory
  7. Vue.js 自定义指令
  8. Java程序员新手老手都离不开八大开发工具
  9. 使用基于注解的mybatis时,利用反射和注解生成sql语句
  10. mysql dba系统学习(8)查询日志文件功能 mysql dba系统学习(9)slow query log慢查询日志功能