Java流程控制05:Switch选择结构

switch语法:
swicth(expression){
case value://匹配条件1
break;// 结束语句(可选)
case value://匹配条件2
break;// 结束语句(可选)
case value://匹配条件3
break;// 结束语句(可选)
case value://匹配条件4
break;// 结束语句(可选)
defaule://当以上匹配条件都不符合是 则走这个(可选)
}
--------------------------------------------------------
switch(expression){
case value:
//语句
break; //可选
case value:
//语句
break; //可选
//你可以有人以数量的case语句
default: //可选
//语句
}
格式的解释:
- switch:表示这是选择结构
- 表达式:取值有限定
byte short int char - JDK5之后加入枚举
JDK7之后加入String(字符串) - case:后面跟的是要和表达式进行比较的值
- break:表示中断结束的意思,控制switch语句的结束
- default:当所有的值和表达式都不匹配时候执行。
执行流程:
1-首先得出表达式的值
2-然后个case的值进行匹配,如果有值与之对应,则执行该语句,执行过程中遇到break就结束。
3-当所有的表达式结果和所有值都没有匹配成功,则执行default语句,然后结束程序。
面试题:
byte可以作为switch的表达式么?(可以)
long可以作为switch的表达式么?(不可以)
String可以作为switch的表达式么?(JDK7后可以)
注意事项:
- break可以省略,但是得到结果可能有变化,因为省略break程序中断取消(case穿透),程序会向下执行,除特殊情况建议不要省略。
- 多个case后面的常量不允许相同。 例如 列出了两个case:1是不允许的。
- default可以省略但是不建议省略,用来对错误数据处理
- default可以放在任意位置,但是默认在最后。
- switch的结束的条件
遇到break或程序执行到最后。
switch代码示例:
package com.wenjian.struct;
public class SwitchDemo01 {
public static void main(String[] args) {
//case 穿透
char grade = 'C';
switch (grade) {
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("普通");
break;
case 'D':
System.out.println("再接再厉");
break;
case 'E':
System.out.println("挂科");
break;
default:
System.out.println("未知成绩");
}
}
}
package com.wenjian.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "qwe";
//JDK7的新特性,表达式结架可以是字符事!!
// 字符的本质还是数字
//反编译 java---class(字背码文件)——-反编译(IDEA)
switch (name) {
case "qwe":
System.out.println("qwe");
break;
case "asd":
System.out.println("asd");
break;
default:
System.out.println("zxc");
}
}
}
反编译:
本地文件夹目录:

反编译需要从项目结构查看目(class文件)

从project查看class输出文件:

然后通过复制粘贴进行拷贝到idea目录,

(直接通过idea界面进行粘贴会提示:)

反编译文件:

从Java SE7开始
switch 支持字符串 String类型了
java文件和反编译文件示例:
.java文件:
package com.wenjian.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "qwe";
//JDK7的新特性,表达式结架可以是字符事!!
// 字符的本质还是数字
//反编译 java---class(字背码文件)——-反编译(IDEA)
switch (name) {
case "qwe":
System.out.println("qwe");
break;
case "asd":
System.out.println("asd");
break;
default:
System.out.println("zxc");
}
}
}
反编译.class 文件,bytecode version:52.0(Java 8):
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.wenjian.struct;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
String name = "qwe";
byte var3 = -1;
switch(name.hashCode()) {
case 96882:
if (name.equals("asd")) {
var3 = 1;
}
break;
case 112383:
if (name.equals("qwe")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("qwe");
break;
case 1:
System.out.println("asd");
break;
default:
System.out.println("zxc");
}
}
}

浙公网安备 33010602011771号