java中switch case语句需要加入break的原因解析
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 <String "Default"> [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 <String "Default"> [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指令的原因。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
- 为什么switch case语句需要加入break
- java Switch-Case忘写break条件时会执行后面不符合case的语句
- Java - Switch case 语句知识点(面试)解析
- C++程序员学Java系列之十一:流程控制语句switch,case,break,default
- switch case语句:从匹配处顺序执行,直到遇到break或结束
- Java switch-case语句用法
- switch-case-break语句
- switch case break default 判断语句
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- switch-case语句里面有return了 ,break还起作用吗?该如何解决
- java学习之旅18、19--switch语句_基本用法_case穿透现象,jdk7.0新特性_增强switch语句
- switch-case 语句的优点和几点注意事项 Java
- Java的switch-case语句
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 解析c语言switch中break语句的具体作用
- 面试题解析:1 Java中switch语句可以作用在enum上的测试
- Java学习笔记_14_switch、continue、break执行语句要点
- 7.1.3 switch语句中的case结尾是否必须加break(废话)