教妹学Java(十四):switch 语句详解

2023-11-03

大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。本篇文章通过我和三妹对话的形式来谈一谈“switch 语句”。

教妹学 Java,没见过这么有趣的标题吧?“语不惊人死不休”,没错,本篇文章的标题就是这么酷炫,接受不了的同学就别点进来看了,所谓好奇心害死猫;能够接受的同学我只能说你赚到了,你不仅能在阅读的过程中感受到思维的乐趣,还真的能学习到知识。下面就由我来介绍一下故事的背景吧。

我有一个漂亮如花的妹妹(见上图),她叫什么呢?我想聪明的读者朋友们都能猜得出:沉默王三,没错,年方三六。父母正考虑让她向我学习,做一名正儿八经的 Java 程序员。我期初是想反抗的,因为程序员这行业容易掉头发。但家命难为啊,与其反抗,不如做点更积极的事情,写点有趣的文章,教妹妹如何更快地掌握 Java 这门编程语言。毕竟程序员还算得上高薪(都是拿命换的啊)。

(铺垫结束,正文开始)

“二哥,今天我们来学习‘switch 语句’,对吧?”

“是的,三妹。Java 中的 switch 语句用来判断变量与多个值之间的相等性。变量的类型可以是 byte、short、int、long,或者对应的包装器类型 Byte、Short、Integer、Long,以及字符串和枚举。”

来看一下 switch 语句的格式:

switch(变量) {    
case 可选值1:    
 // 可选值1匹配后执行的代码;    
 break;  // 该关键字是可选项
case 可选值2:    
 // 可选值2匹配后执行的代码;    
 break;  // 该关键字是可选项
......    
    
default: // 该关键字是可选项     
 // 所有可选值都不匹配后执行的代码 
}    
  • 变量可以有 1 个或者 N 个值。

  • 值类型必须和变量类型是一致的,并且值是确定的。

  • 值必须是唯一的,不能重复,否则编译会出错。

  • break 关键字是可选的,如果没有,则执行下一个 case,如果有,则跳出 switch 语句。

  • default 关键字也是可选的。

画个流程图:

来个示例:

public class Switch1 {
    public static void main(String[] args) {
        int age = 20;
        switch (age) {
            case 20 :
                System.out.println("上学");
                break;
            case 24 :
                System.out.println("苏州工作");
                break;
            case 30 :
                System.out.println("洛阳工作");
                break;
            default:
                System.out.println("未知");
                break; // 可省略
        }
    }
}

输出:

上学

当两个值要执行的代码相同时,可以把要执行的代码写在下一个 case 语句中,而上一个 case 语句中什么也没有,来看一下示例:

public class Switch2 {
    public static void main(String[] args) {
        String name = "沉默王二";
        switch (name) {
            case "詹姆斯":
                System.out.println("篮球运动员");
                break;
            case "穆里尼奥":
                System.out.println("足球教练");
                break;
            case "沉默王二":
            case "沉默王三":
                System.out.println("乒乓球爱好者");
                break;
            default:
                throw new IllegalArgumentException(
                        "名字没有匹配项");

        }
    }
}

输出:

乒乓球爱好者

枚举作为 switch 语句的变量也很常见,来看例子:

public class SwitchEnumDemo {
    public enum PlayerTypes {
        TENNIS,
        FOOTBALL,
        BASKETBALL,
        UNKNOWN
    }

    public static void main(String[] args) {
        System.out.println(createPlayer(PlayerTypes.BASKETBALL));
    }

    private static String createPlayer(PlayerTypes playerType) {
        switch (playerType) {
            case TENNIS:
                return "网球运动员费德勒";
            case FOOTBALL:
                return "足球运动员C罗";
            case BASKETBALL:
                return "篮球运动员詹姆斯";
            case UNKNOWN:
                throw new IllegalArgumentException("未知");
            default:
                throw new IllegalArgumentException(
                        "运动员类型: " + playerType);

        }
    }
}

输出:

篮球运动员詹姆斯

本篇文章为《教妹学Java》专栏的第十四篇文章,是不是有趣得很?我相信你能感受的到,这可是全网独一份,我看到已经有人在模仿了。现在定价只需 9.9 元,9.9 元你连一杯奶茶都买不到,但却能买下二哥精心制作的专栏,据说 CSDN 已经考虑涨价了,毕竟已经卖出一百多份了。

我知道,购买专栏的同学都是冲着二哥的名声来的,毕竟二哥是 CSDN 的明星博主,哈哈。为表谢意,我再附送上个人微信(qing_geee),你有什么问题都可以来咨询。

上一篇回顾:教妹学Java(十三):if-else 语句详解

PS:本篇文章中的示例代码已经同步到码云,传送门~

原创不易,喜欢就点个赞,因为你一个小小的举动,就会让这个世界多一份美好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教妹学Java(十四):switch 语句详解 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • git冲突在eclipse、idea、sourceTree上的解决方法

    一 使用eclipse时 情形一 用户1编辑A文件并提交 用户2未拉取最近代码也编辑A文件产生的冲突 用户2未提交本地仓库时 1 进入同步页面 注意 只有一个向下箭头表示未提交本地仓库 2 拉取远程文件 双击冲突文件减去编辑 将右侧代码合并
  • IT实习技能提升第一篇

    文章目录 前言 一 Git 1 基础配置 2 老板让去git上拉取代码 3 更改完代码后上推 二 QT使用步骤 1 注册QT账号挺有必要 2 同时运行两个项目 总结 前言 新入职的码农 嵌入式软件方向 提示 以下是本篇文章正文内容 下面案例
  • IOS小白入门指南

    加入ios 项目已经一个多月了 本篇文章主要介绍IOS开发入门的一些基础知识 帮助想学习iOS开发的人更有效率地学习 目录 需要的计算机基础 开发语言选择 IOS两种开发语言的异同 Objective C和swift的相同点 二者的不同点
  • 关于webview加载网页,返回后总是刷新页面问题解决

    最近用webview发现返回上个页面总是又自动刷新页面 我的需求是进入下页的时候不用缓存 而返回上个页面的时候不要刷新页面回到顶部 要保持在原来页面进入下页的位置 首先来了解一下webview加载网页的几个模式 即websetting中设置
  • 【AI视野·今日CV 计算机视觉论文速览 第211期】Wed, 2 Jun 2021

    AI视野 今日CS CV 计算机视觉论文速览 Wed 2 Jun 2021 Totally 63 papers 上期速览 更多精彩请移步主页 Interesting YOLOS You Only Look at One Sequence 纯
  • 冲击python二级——python的安装,IDLE的一般操作,PIP包管理使用,变量基础

    现在大部分的教程 都会要求直接安装Anaconda 和Pycharm 虽然pycharm是非常优秀的python IDE生产工具 但是对于新手来说配置比较繁琐 并不友好 而且国考计算机二级 只能用python自带的idle 用pip包管理安
  • 大数据——基于Spark Streaming的流数据处理和分析

    基于Spark Streaming的流数据处理和分析 流是什么 为什么需要流处理 流处理应用场景 如何进行流处理 Spark Streaming简介 Spark Streaming流数据处理架构 Spark Streaming内部工作流程
  • 实验室项目——连接mysql服务器报错(驱动版本不一致)

    mysql right syntax to use near OPTION SQL SELECT LIMIT 15 at line 1 问题描述 OPTION SQL SELECT LIMIT XXX 问题原因 项目使用的mysql驱动和m
  • 集线器、交换机和路由器(图解)

    一 物理层 使用 MAC 解决设备的身份证问题 1 通信的原始时代 很久很久之前 你不与任何其他电脑相连接 孤苦伶仃 直到有一天 你希望与另一台电脑 B 建立通信 于是你们各开了一个网口 用一根网线连接了起来 用一根网线连接起来怎么就能 通
  • UEFI/Legacy bios简介与grub安装教程

    目录 一 BIOS简介 二 UEFI与Legacy 启动模式简介 Legacy启动模式 UEFI启动模式 具体不同 三 grub安装 grub软件包的安装 grub源码下载 grub本地编译安装及使用 Ubuntu 环境下 四 参考 一 B
  • 华为机试-8.计算面积(绘图机器的绘图笔初始位置在原点)

    计算面积 绘图机器的绘图笔初始位i在原点 0 0 机器启动后其绘图笔按下面规则绘制直线 1 尝试沿着横向坐标轴正向绘制直线 直到给定的终点值E 2 期间可通过指令在纵坐标轴方向进行偏移 井同时恰制直线 偏移后按规则1绘制直线 指令的格式为X
  • chatgpt赋能python:Python输出中出现的None值:问题、解释和解决方案

    Python输出中出现的None值 问题 解释和解决方案 在Python编程中 经常会出现输出中包含None值的情况 这会给程序员带来一些困扰 因为它可能会在应用程序中导致错误或不正确的结果 在本篇文章中 我们将探寻这个问题的原因 介绍有关
  • Cascade EF-GAN: 局部聚焦渐进式面部表情编辑

    目前面部表情编辑存在的问题 生成性对抗网络 GAN 的最新进展表明 面部表情编辑有了显著的改进 然而 当前的方法仍然容易在表达密集型区域周围产生伪影和模糊 并且在处理大间隙表达转换 例如从愤怒到大笑的转换 时 经常引入不希望的重叠伪影 本文
  • Java中为什么只有值传递?

    开始之前 我们先来搞懂下面这两个概念 形参 实参 值传递 引用传递 形参 实参 方法的定义可能会用到 参数 有参的方法 参数在程序语言中分为 实参 实际参数 用于传递给函数 方法的参数 必须有确定的值 形参 形式参数 用于定义函数 方法 接
  • 面向对象三大基本特征及五大基本原则介绍

    目录 前言 一 面向过程和面向对象区别 二 面向对象的三大基本特征 封装 继承 多态 1 封装 2 继承 3 多态 三 面向对象的五大基本原则 1 单一职责原则 SRP 2 开放封闭原则 OCP 3 里氏替换原则 LSP 4 依赖倒置原则
  • python 如何将代码中的输入保存到txt里边

    一 在 print 前建立一个txt python3 f open print txt w print this is a txt file f f close python2 f open print txt w print gt gt
  • 摄影基础之---景深

    正在上传 重新上传取消 1 概述 先看两个例子 拍摄花 昆虫等照片时 背景拍的比较模糊 突出被拍物 但当拍摄纪念照 风景等照片时 却会把背景拍摄得和被拍对象一样清晰 这两者就是不同景深 前者为浅景深 拍摄聚焦到被拍物上 只能拍清一小段距离
  • 什么是MMU,MMU的作用

    I 什么是MMU MMU的作用 MMU是Memory Management Unit的缩写 针对各种CPU MMU是个可选的配件 MMU负责的是虚拟地址 O1663 O1664 物理地址的转换 提供硬件机制的内存访问授权 现 代的多用户多进
  • 类与对象(初级)

    目录 1 面向对象的初步认知 1 1 什么是面向对象 官方解释 1 2 面向对象与面向过程的对比 2 类 2 1 简单认识类 2 2 类的定义格式 3 类的实例化 3 1 什么是实例化 3 2 类和对象的说明 4 构造方法 构造器 4 1
  • 教妹学Java(十四):switch 语句详解

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 switch 语句 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就别