Java入门第7节——switch选择结构

系列连载文章,大家可以从我的专栏学习Java入门基础知识,后续也会有更高级的Java特性、企业级开发框架,也有平常工作中的技术总结和分享,欢迎关注我的CDSN博客。同时可关注微信公众号“Java开发之旅”,获得更多技术资料! 

目录

闲言碎语

switch结构的简介及语法

switch结构中的break

switch所支持的数据类型

小结


闲言碎语

上一节我们学习了Java中的if选择结构,让我们实现了程序中的逻辑控制。Java当中还有一种选择结构叫做switch,下面我们就学习这个结构,大家注意总结和对比它和if之间的区别。

 

switch结构的简介及语法

先上语法:

switch (变量或字面值) {
    case 字面值1 :
        //要执行的语句
        break;  //跳出标识,可选
    case 字面值2 :
        break;
    //……
    //任意个case分支
    //……
    default :
        //要执行的语句
        break;
}

以上语法中,每一个case表示一个分支,switch结构就是判断变量的值是否和某个分支的值相等,如果相等,那就执行这个分支里的代码;如果不相等,就继续往下判断其他的分支;如果所有分支都不相等,就执行default分支里的代码,即默认要执行的代码。当然,这里的default分支是可选的,如果所有case分支都不满足又没有default,那就什么都不执行。

看一个例子:

int num = 3;
switch (num) {
    case 1:
        System.out.println("num等于1,进入了第一个case分支");
        break;
    case 2:
        System.out.println("num等于2,进入了第二个case分支");
        break;
    case 3:
        System.out.println("num等于3,进入了第三个case分支");
        break;
    default:
        System.out.println("没有满足条件的case分支,执行默认的default分支");
        break;
}

以上代码,因为num的变量值是3,所以前两个case分支都不满足条件,所以执行了第三个case分支:

 

 

如果将num的值改为4,那么所有的case分支都不满足,就会执行default分支:

 

 

另外,switch结构的case分支只能给定字面值,即写死的值,不可以是变量,以下代码错误:

 

 

正是由于这个原因,switch只可以做等值判断,不可以做更灵活的区间判断,所以下面的代码也是错误的:

 

 

细心的同学可以发现,我们上面写的代码,其实等同于以下代码(前提是所有case分支都加了break):

int num = 3;
if (num == 1) {
    System.out.println("num等于1,进入了第一个case分支");
}else if (num == 2) {
    System.out.println("num等于2,进入了第二个case分支");
}else if (num == 3) {
    System.out.println("num等于3,进入了第三个case分支");
}else {
    System.out.println("没有满足条件的case分支,执行默认的default分支");
}

所以说,在等值判断的情况下,switch结构和if结构都可以实现,一般情况下为了简洁我们会选择switch结构。但有时候不得不使用if结构,比如区间判断或者更复杂的逻辑判断。

上面我提到break语句是可选的,而且我在转换为上面的if-else结构时,特意说明“前提是所有case分支都加了break”,为什么呢?

接下来就让我们一探break语句的究竟!

 

switch结构中的break

在switch语句中,break是可选的。当某一个case分支被执行完毕,如果此分支没有break,将继续执行后面的所有case分支,直到遇见break为止。如果后面的所有分支都没有break,那么将一直执行到default分支才会跳出整个switch结构。

int num = 1;
switch (num) {
    case 1:
        System.out.println("num等于1,进入了第一个case分支");
    case 2:
        System.out.println("num等于2,进入了第二个case分支");
    case 3:
        System.out.println("num等于3,进入了第三个case分支");
    default:
        System.out.println("没有满足条件的case分支,执行默认的default分支");
        break;
}

以上代码,第一个case分支就被匹配上了,所以会输出“num等于1,进入了第一个case分支”。但是我们没有在这个分支加break,所以会继续往下执行其他的case分支(哪怕这些case分支的值并不是1),又因为后续所有的case分支都没有break,所以会一直执行到default分支,结束

 

 

这里需要注意两点。第一:如果某个case分支被执行,但是却没有break,那么后续的所有case分支不管是否满足条件,都会被执行;第二,执行完default分支后结束了整个switch结构,但并不是因为default分支有break,而是因为default分支就是处于结构的最后,没有代码可执行了,所以一般情况下default分支也不用加break,这里只是让大家知道它可以加,但是没必要加。

如果我在case 2分支中加上break,那么就不会继续执行后续的case和default:

int num = 1;
switch (num) {
    case 1:
        System.out.println("num等于1,进入了第一个case分支");
    case 2:
        System.out.println("num等于2,进入了第二个case分支");
        break;
    case 3:
        System.out.println("num等于3,进入了第三个case分支");
    default:
        System.out.println("没有满足条件的case分支,执行默认的default分支");
        break;
}

switch所支持的数据类型

switch结构支持以下6种数据类型:byte、short、int、char、String、枚举。

枚举类型会在后面的章节中引入,现在还太早。所以以下代码都是合法的:

char c = 'A';
switch (c) {
    case 'A':
        System.out.println("优秀");
        break;
    case 'B':
        System.out.println("良好");
        break;
    case 'C':
        System.out.println("差");
        break;
    default:
        System.out.println("优秀");
}
String s = "A";
switch (s) {
    case "A":
        System.out.println("优秀");
        break;
    case "B":
        System.out.println("良好");
        break;
    case "C":
        System.out.println("差");
        break;
    default:
        System.out.println("优秀");
}

另外,case分支的值必须和switch括号里的变量值是同一数据类型,你不能switch里给的是字符串类型,case分支的字面值却是数字类型:

 

 

小结

switch结构的执行流程:

1、由上往下,依次判断每个case分支的字面值是否等于变量的值

2、如果相等则执行此分支中的代码,执行完毕后再看此分支是否有break语句,有的话直接跳出整个switch结构,没有的话就执行此分支后面的所有分支,直到遇见break语句跳出

3、如果不相等,则继续往下判断其他的分支,重复以上两个步骤

4、所有的case分支都不满足,此时如果有default分支则执行default,执行完default就跳出了switch结构,没有default就直接跳出switch结构,什么都不执行

 

switch结构和if结构的区别和联系:

1、switch结构只能进行等值判断,而if结构可以进行区间判断、负责逻辑的判断

2、等值判断下,switch结构要更简洁

3、所有的switch结构都可以转换为if-else结构,但if-else结构不一定可以转换为switch结构

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章