这是java汇编代码学习的第二篇,本文介绍一个比较简单的知识点,也是比较常用的知识点,希望大家在平时编程中注意。
switch是我们比较常用的控制语句之一,我们都知道,switch 语句就是对输入值进行判断然后利用case语句返回我们所需的结果,具体如下
switch(n){
case 1:
//do something;
break;
case 2:
//do something:
break;
case 3:
//do something;
break;
case 4:
//do something;
break;
case 5:
//do something;
break;
default:
//default
break;
}
这是一个比较常规的也是推荐的用法,注意到我们每一个case语句都有一个break,如果没有会怎么样呢?直接上代码
public class switchTest{
public static void main(String[] args){
int card = 11;
switch(card){
case 11:
System.out.print("Jack");
case 12:
System.out.print("Queen");
break;
}
}
}
我们的愿意是通过点数输出 牌的名字,11点对应的是J,Jack,但是实际上会输出:
这与实际不符,很多小伙伴应该也早就预料到了这个输出,为什么会这样呢?我们从java字节码的角度来找原因
仔细看字节码(稍微会点汇编就好)从汇编代码看出,switch是通过查表控制流程的,当输入11,会跳转到32首先获取到print()方法,给它传入Jack,并执行输出,正常应该结束并返回,但从字节码可以看出代码会继续执行并输出Queen,这是由于没有加入break语句造成的,所以最后输出"JackQueen"。还有一点需要注意的是我这里并没有写default;但是字节码还是给default添加了控制,就是直接return;这说明switch语句是保证会退出的,但我们只是了解这个就好了,我们应该按照代码块一的形式写,有default,case语句要添加break语句,这会减少出错的可能,代码的可读性更好。
学习过程中,记录这些更多的是为了以后自己查看,也希望能够给小伙伴们带来一些帮助。恳请各位指出不足与错误之处,万分感谢。