Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 最新资讯 >

java中switch case语句需要加入break的原因是什么

发布日期:2019-09-24 17:56:15点击次数:

分享到:
  今天西安鸥鹏java培训机构小编为大家介绍“java中switchcase语句需要加入break的原因是什么”,希望通过此文大家能够知道switchcase语句需要加入break的原因,下面就随小编一起来了解一下吧。
java中switch case语句需要加入break的原因是什么

  java中使用switchcase语句需要加入break做了具体的实例分析,及编译源码,在源码中分析应该如何使用。

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

  publicstaticvoidtest(intindex){

  switch(index){

  case1:

  System.out.println(1);

  case2:

  System.out.println(2);

  case3:

  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打开后,我们可以看到如下内容:

  publicstaticvoidtest(intindex);

  iload_0[index]

  tableswitchdefault:49

  case1:28

  case2:35

  case3:42

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

  iconst_1

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

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

  iconst_2

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

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

  iconst_3

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

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

  ldc<String"Default">[33]

  invokevirtualjava.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语句,如下这样:

  publicstaticvoidtest(intindex){

  switch(index){

  case1:

  System.out.println(1);

  break;

  case2:

  System.out.println(2);

  break;

  case3:

  System.out.println(3);

  break;

  default:

  System.out.println("Default");

  break;

  }

  }

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

  publicstaticvoidtest(intindex);

  iload_0[index]

  tableswitchdefault:58

  case1:28

  case2:38

  case3:48

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

  iconst_1

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

  goto66

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

  iconst_2

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

  goto66

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

  iconst_3

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

  goto66

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

  ldc<String"Default">[33]

  invokevirtualjava.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指令的原因。