假设我们有如下这样一个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); 0 iload_0 [index] 1 tableswitch default: 49 case 1: 28 case 2: 35 case 3: 42 28 getstatic java.lang.System.out : java.io.PrintStream [22] 31 iconst_1 32 invokevirtual java.io.PrintStream.println(int) : void [28] 35 getstatic java.lang.System.out : java.io.PrintStream [22] 38 iconst_2 39 invokevirtual java.io.PrintStream.println(int) : void [28] 42 getstatic java.lang.System.out : java.io.PrintStream [22] 45 iconst_3 46 invokevirtual java.io.PrintStream.println(int) : void [28] 49 getstatic java.lang.System.out : java.io.PrintStream [22] 52 ldc <String "Default"> [33] 54 invokevirtual java.io.PrintStream.println(java.lang.String) : void [35] 57 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); 0 iload_0 [index] 1 tableswitch default: 58 case 1: 28 case 2: 38 case 3: 48 28 getstatic java.lang.System.out : java.io.PrintStream [22] 31 iconst_1 32 invokevirtual java.io.PrintStream.println(int) : void [28] 35 goto 66 38 getstatic java.lang.System.out : java.io.PrintStream [22] 41 iconst_2 42 invokevirtual java.io.PrintStream.println(int) : void [28] 45 goto 66 48 getstatic java.lang.System.out : java.io.PrintStream [22] 51 iconst_3 52 invokevirtual java.io.PrintStream.println(int) : void [28] 55 goto 66 58 getstatic java.lang.System.out : java.io.PrintStream [22] 61 ldc <String "Default"> [33] 63 invokevirtual java.io.PrintStream.println(java.lang.String) : void [35] 66 return
我们可以看到switch语句默认会执行58行,如果传入的参数是1则会执行28行,如果是2则会从38行开始执行,接着我们可以看到28行开始是执行的System.out.println(1)的逻辑,完了后会顺序执行到35行,35行的指令是会引导程序执行到第66行,也就是跳出了switch逻辑,对应我们的测试代码就是程序结束了。这也是为什么我们在使用switch语句时通常需要在每个case语句结束时加入break指令的原因。
相关推荐
Java中switch case语句需要加入break的原因解析 Java中switch case语句需要加入break的原因解析是因为switch语句的执行机制。switch语句的执行机制是根据满足条件从确定的行开始执行,如果不加入break语句跳出...
- 不包含break的case语句会导致程序继续执行下一个case,直到遇到break或到达switch的结尾。 5. **default分支**: - default是可选的,通常作为switch语句的最后一个分支,但也可以放在其他位置。 - 当表达式的...
* 在 switch 语句中,如果没有 break 语句,程序将继续执行到下一个 case 语句。 * 如果没有 default 语句,程序将执行到结束。 * 在 switch 语句中,各个 case 语句的顺序并不影响执行结果。 switch 语句的优点:...
在main函数中,定义了一个字符变量grade,用于存储输入的成绩等级。 使用printf函数提示用户输入成绩等级,并使用scanf函数读取用户输入的成绩等级,存储到变量grade中。...使用break语句终止switch case语句的执行。
- 每个`case`后面通常都跟着一个`break`语句,它的作用是跳出当前`switch`结构,避免执行后续的`case`。如果没有`break`,程序会继续执行下一个`case`的代码,这种情况称为“贯穿”(fallthrough)现象。 3. **...
3. **break**:`break`语句用于跳出当前`switch`结构,防止代码继续执行下一个`case`。若没有`break`,程序会"落入"(fall through)下一个`case`,除非遇到`break`或者`switch`结束。 4. **default**:可选的`...
3. `break`:每个`case`后通常有一个`break`语句,它的作用是跳出整个`switch`结构,防止执行下一个`case`的代码。如果不使用`break`,则会继续执行后续的`case`,直到遇到`break`或到达`default`。 4. `default`:...
执行完代码块后,通常使用 `break` 语句跳出 `switch` 语句,防止执行后续的 `case`。如果没有匹配的 `case`,则执行 `default` 代码块(可选)。 在描述中的例子中,`switch` 语句的 `expression` 是 `score / 10`...
C语言switch-case语句详解 switch-case语句是C语言中的一种选择语句,用于根据不同的条件执行...switch-case语句是C语言中的一种重要的选择语句,需要掌握其基本格式、执行流程和考点,以便更好地应用于实际编程中。
在编程语言中,`switch`语句和`case`语句是控制流程的重要组成部分,尤其在处理多条件分支时显得尤为高效。它们通常用于替代多个`if...else if...else`结构,使得代码更加简洁易读。下面我们将深入探讨`switch`语句...
4. 如果switch表达式的值等于某个case后的值,但该case语句不包含break语句,则控制流将继续执行后续的case语句,直到遇到break语句为止。 二、switch语句的注意要点 1. switch语句中使用的表达式必须是整型或可以...
**switch-case语句**是C语言中用于处理多分支选择的一种结构,它的出现是为了替代复杂的if-else-if链,使得代码更加简洁、易读。在处理多个可能的条件分支时,switch-case语句能有效地组织代码,使得每一种情况对应...
(5) 一般在各个case语句最后应该加一break语句,可以使程序流程跳出Switch结构。否则会从入口处一直向下执行。 (6) 各个case和default出现的先后次序,并不影响执行结果。default可以没有。 (7) 多个case可共用一...
- 如果存在 `break` 语句,当找到一个匹配的 `case` 子句后,执行该子句内的代码直至遇到 `break` 语句为止,随后跳出整个 switch 语句。 - 若找不到匹配的 `case` 子句,则执行 `default` 子句(如果存在),然后...
* switch语句的case语句必须是常量值。 * switch语句的default语句是可选的。 * break语句必须在每个case语句的末尾。 switch语句是C语言中的一种非常有用的控制结构,能够简化代码,提高代码的可读性和维护性。...
switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console.log(a); break; default: break; } 这里a和case列表中从上而下逐一做比较,如果...
switch-case 语句 switch-case 语句是C语言中的一种选择语句,用于根据不同的值执行不同的代码块。...switch 语句的执行过程为计算 expression 的值,并将其与各个 case 的值进行比较,然后执行对应的代码块。
下面将详细介绍 C++ 中的 switch 语句、goto 语句、break 语句、for 循环语句等控制语句。 一、switch 语句 switch 语句是一种选择结构语句,用于根据不同的值执行不同的语句。其基本形式为: ```cpp switch (整型...
单片机资料c源码switch-case-break语句提取方式是百度网盘分享地址