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指令的原因。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
主要内容:使用 break 语句直接强行退出循环(break 不带标签),使用 break 语句实现 goto 的功能(break 带标签),在 switch 语句中终止一个语句序列某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为 false 时才退出循环。此时,可以使用 break 来完成这个功能。 break 用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到 break,系统将完全结束该循环,开始执行循环之后的代码。 在 Java 中,break 语句有 3
问题内容: 我需要一个Java API来解析SQL语句。 例如,我有一个SQL查询 我需要检索表名称“ Products”和列名称为“ Prog_ID”等。 如果可能,请提供指向教程或代码段的任何链接。 问题答案: 最终使用了http://zql.sourceforge.net/中的ZQL解析库。 如果您有简单的查询,那应该很容易做
我需要删除代码中的语句,但我已经不知道怎么做了。你能帮帮我吗?
Scala 循环 Scala 语言中默认是没有 break 语句,但是你在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。 语法 Scala 中 break 的语法有点不大一样,格式如下: // 导入以下包 import scala.util.control._ // 创建 Br
Swift break语句会立刻结束整个控制流的执行。 如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。 语法 Swift break语句的语法格式如下: break 流程图: 实例 import Cocoa var index = 10 repeat{ index = index + 1
C++ 循环 C++ 中 break 语句有以下两种用法: 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。 它可用于终止 switch 语句中的一个 case。 如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。 语法 C++ 中 break 语句的语法: break