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");
        }

    }
}

posted @ 2020-07-16 11:55  nkndlawn  阅读(186)  评论(0)    收藏  举报