多选择结构除了if多分支判断还有switch case语句。switch case语句判断一个变量与一系列值的某个值是否相等,每一个值称为一个分支。switch可以支持的变量类型有:byte、short、int、char从javaSE7开始switch开始支持String类型
if判断区间比较方便,而switch是匹配具体某一个值
switch语法格式:
switch(条件/表达式){
case "值1":
//执行的语句块1
break; //
case "值2":
//执行的语句块2
case "值3":
//执行的语句块3
default:
//默认执行的。当所有条件都不满足时执行。相当于else
案例1 JDK7开始switch开始支持String类型
package Test_Demo;
import java.util.Scanner;
public class Demo13 {
public static void main(String[] args) {
System.out.print("请输入你的段位:");
Scanner S=new Scanner(System.in);
String s=S.next();
switch(s){
case "荣耀王者":
System.out.println("荣耀王者好厉害!!!");
case "最强王者":
System.out.println("最强王者还可以...");
case "至尊星耀":
System.out.println("加油努力上个王者!");
case "永恒钻石":
System.out.println("老老实实在钻石呆着吧");
case "尊贵铂金":
System.out.println("额....还是别上组钻石了吧");
case "荣耀黄金":
System.out.println("幼儿园小朋都比你厉害!");
case "倔强青铜":
System.out.println("你刚下载的游戏吧?");
default:
System.out.println("你不会没有段位吧?小菜鸡");
}
}
}
执行结果:
请输入你的段位:最强王者
最强王者还可以...
加油努力上个王者!
老老实实在钻石呆着吧
额....还是别上组钻石了吧
幼儿园小朋都比你厉害!
你刚下载的游戏吧?
你不会没有段位吧?小菜鸡
输入的是“最强王者”可是除了荣耀王者所有的输出语句都输出出来了,这是因为case穿透造成的。在每个case后加个bleak;即可,break在if中作用是结束循环,在switch中是结束switch循环,continue的作用是结束本次循环继续执行下次循环
package Test_Demo;
import java.util.Scanner;
public class Demo13 {
public static void main(String[] args) {
System.out.print("请输入你的段位:");
Scanner S=new Scanner(System.in);
String s=S.next();
switch(s){
case "荣耀王者":
System.out.println("荣耀王者好厉害!!!");
break;
case "最强王者":
System.out.println("最强王者还可以...");
break;
case "至尊星耀":
System.out.println("加油努力上个王者!");
break;
case "永恒钻石":
System.out.println("老老实实在钻石呆着吧");
break;
case "尊贵铂金":
System.out.println("额....还是别上组钻石了吧");
break;
case "荣耀黄金":
System.out.println("幼儿园小朋都比你厉害!");
break;
case "倔强青铜":
System.out.println("你刚下载的游戏吧?");
break;
default:
System.out.println("你不会没有段位吧?小菜鸡");
break;
}
}
}
执行结果:
请输入你的段位:至尊星耀
加油努力上个王者!
加入break之后只会匹配符合case值的语句块。如果不加入break;则会一直匹配。
java反编译
字符的本质还是数字
.java文件通过编译成功.class文件。class文件也叫字节码文件(人看不懂的,需要进行反编译),将class文件编译为.java文件。程序能运行一定是已经生成.class文件才能运行
字节码文件人是看不懂的
反编译工具:IDEA
将编译后的.class文件防止src的项目下即可
用IDEA打开即可查看.class文件的编译前源文件
反编译后的.class文件中源文件判断的是switch(s),.class文件判断的是hashcode。每一个对象都对应一个hashcode。switch通过hashcode来进行判断。case则是通过hashcode将条件判断为一个数值(每一个中文都有自己对应的哈希值),判断时判断hash与条件相不相同
如下图,case语句也类似if条件判断语句