滚雪球学Java(13):掌握JavaSE-Switch条件语句,提高编程效率

简介: 【4月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

  咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  控制流是编程中的重要概念之一,其中条件语句是控制流的重要部分之一。在Java编程中,switch语句是一种常见的条件语句,用于执行不同的代码块,具体取决于表达式的结果。本篇文章将介绍switch语句的语法、用法、示例和应用场景。

摘要

  本篇文章将围绕Java中的switch语句展开讨论。文章首先介绍了switch语句的基本语法,然后探讨了如何使用switch语句来处理不同的数据类型,包括整数、字符、字符串和枚举类型。然后,文章介绍了switch语句中的break和default关键字,以及如何使用它们来控制代码的执行。最后,文章提供了一些示例和应用场景,让读者对switch语句的使用有更深刻的理解。

正文

switch语句的基本语法

switch语句是一种多分支条件语句,用于根据不同的条件执行不同的代码块。其基本语法如下:

switch (表达式) {
   
    case 常量1:
        // 执行代码块1
        break;
    case 常量2:
        // 执行代码块2
        break;
    // 其他case语句
    default:
        // 执行默认代码块
}

  其中,表达式可以是任何基本数据类型,如整数、字符、字符串等,也可以是枚举类型。case语句用于比较表达式的值和常量的值是否相等,如果相等就执行相应的代码块。如果表达式的值与所有的常量都不匹配,则执行默认代码块。

  需要注意的是,每个case语句都必须以break结束,否则会执行到下一个case语句。如果没有break语句,程序会从第一个匹配的case语句开始执行,并直到遇到break或整个switch语句结束。

处理整数类型

使用switch语句处理整数类型非常方便。下面是一个示例:

int day = 2;
switch (day) {
   
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    // 其他case语句
    default:
        System.out.println("未知");
}

  在上面的示例中,我们定义了一个整数day,并使用switch语句根据day的值执行不同的代码块。如果day的值为1,就输出“星期一”,如果day的值为2,就输出“星期二”,其他情况下输出“未知”。

代码分析:

  根据给定的代码,首先定义了一个整型变量day并赋值为2。然后使用switch语句根据day的值进行判断。

  在switch语句中,当day的值为1时,会执行第一个case的语句,即输出"星期一",然后通过break语句跳出switch语句。

  当day的值为2时,会执行第二个case的语句,即输出"星期二",然后通过break语句跳出switch语句。

  如果day的值不满足以上两个case的条件,就会执行default语句,即输出"未知"。

  根据给定的代码,由于day的值为2,所以会输出"星期二"。

处理字符类型

除了整数类型,switch语句还可以处理字符类型。下面是一个示例:

char grade = 'B';
switch (grade) {
   
    case 'A':
        System.out.println("优秀");
        break;
    case 'B':
        System.out.println("良好");
        break;
    // 其他case语句
    default:
        System.out.println("未知");
}

在上面的示例中,我们定义了一个字符类型的变量grade,并使用switch语句根据grade的值执行不同的代码块。如果grade的值为'A',就输出“优秀”,如果grade的值为'B',就输出“良好”,其他情况下输出“未知”。

代码分析:

  根据以上代码分析,首先定义了一个 char 类型的变量 grade,并将其赋值为 'B'。然后使用 switch 语句对 grade 进行判断。

根据 switch 语法,会根据 grade 的值匹配到相应的 case 分支。在这里,grade 的值为 'B',因此会执行 case 'B' 下的代码块。这里的代码块是输出字符串 "良好"。

由于没有使用 break 语句,代码会继续执行后面的 case 分支。但是在这里没有其他 case 分支,所以没有更多的代码会被执行。

因此,以上代码会输出 "良好"。

处理字符串类型

在Java 7以前,switch语句只能处理整数和字符类型。但是,从Java 7开始,switch语句也可以处理字符串类型。下面是一个示例:

String color = "red";
switch (color) {
   
    case "red":
        System.out.println("红色");
        break;
    case "green":
        System.out.println("绿色");
        break;
    // 其他case语句
    default:
        System.out.println("未知");
}

在上面的示例中,我们定义了一个字符串类型的变量color,并使用switch语句根据color的值执行不同的代码块。如果color的值为“red”,就输出“红色”,如果color的值为“green”,就输出“绿色”,其他情况下输出“未知”。

需要注意的是,使用字符串类型作为switch语句的表达式时,每个case语句必须使用字符串字面量。

代码分析:

  根据上述代码,我们有一个字符串变量color,它用来存储颜色的值。我们使用switch语句来判断color的值,并根据不同的情况进行相应的操作。

首先,我们检查color的值是否为"red"。如果是,我们将输出红色,并使用break语句来结束switch语句。

如果color的值不是"red",我们继续检查它是否为"green"。如果是,我们将输出绿色,并使用break语句来结束switch语句。

如果color的值既不是"red"也不是"green",我们将执行default语句块,输出"未知"。

总结:根据color的值的不同,我们将输出相应的颜色名称。如果color的值不是"red"也不是"green",我们将输出"未知"。

处理枚举类型

与字符串类型一样,从Java 7开始,switch语句也可以处理枚举类型。下面是一个示例:

enum Status {
   
    NEW, RUNNING, FINISHED
}
...
Status status = Status.NEW;
switch (status) {
   
    case NEW:
        System.out.println("新的");
        break;
    case RUNNING:
        System.out.println("运行中");
        break;
    case FINISHED:
        System.out.println("已完成");
        break;
}

在上面的示例中,我们定义了一个枚举类型Status,并使用switch语句根据status的值执行不同的代码块。如果status的值为NEW,就输出“新的”,如果status的值为RUNNING,就输出“运行中”,如果status的值为FINISHED,就输出“已完成”。

代码分析:

  根据以上代码,我们定义了一个枚举类型Status,包含了NEWRUNNINGFINISHED三种状态。

然后我们声明一个Status类型的变量status,并将其赋值为Status.NEW

接下来我们使用switch语句根据status的值进行判断。如果status的值是Status.NEW,则会执行对应的代码块,输出"新的";如果status的值是Status.RUNNING,则会执行对应的代码块,输出"运行中";如果status的值是Status.FINISHED,则会执行对应的代码块,输出"已完成"。

在这个例子中,status的值是Status.NEW,因此输出结果为"新的"。

break和default关键字

  在switch语句中,break和default是两个重要的关键字。break用于中断switch语句的执行,default用于定义默认的代码块。下面是一个示例:

int score = 90;
switch (score) {
   
    case 80:
        System.out.println("良好");
        break;
    case 90:
    case 100:
        System.out.println("优秀");
        break;
    default:
        System.out.println("未知");
}

  在上面的示例中,我们定义了一个整数类型的变量score,并使用switch语句根据score的值执行不同的代码块。如果score的值为80,就输出“良好”,如果score的值为90或100,就输出“优秀”,其他情况下输出“未知”。

  需要注意的是,case语句可以合并,如上面的示例中,case 90和case 100合并成了一个语句块,并使用了相同的代码。

代码分析:

  根据上述代码分析,变量score的值为90。代码使用了switch语句来根据score的值进行判断。

首先,代码执行switch(score)语句,根据score的值进入对应的case分支。

在case 80:的分支中,score的值为90,不满足条件,不执行该分支的代码。

在case 90:和case 100:的分支中,score的值为90,满足条件,执行对应分支的代码。在这个例子中,两个分支的代码是一样的,所以会输出"优秀"。

最后一个分支default是在没有匹配到任何case的情况下执行的。但在这个例子中,有匹配到的分支,所以不会执行default分支的代码。

因此,根据上述代码分析,输出将会是"优秀"。

示例和应用场景

在实际编程中,switch语句具有广泛的应用场景,如下面所示:

  • 处理菜单、选项和命令行参数;
  • 根据状态、错误码、事件类型等执行不同的操作;
  • 根据日期、时间、季节、天气等执行不同的操作;
  • 根据对象类型、方法名、属性名等执行不同的操作。

下面是一个示例,展示如何使用switch语句根据日期的值输出不同的信息:

import java.util.Scanner;


public class SwitchExample {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入日期:");
        int day = scanner.nextInt();
        switch (day) {
   
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("周末");
                break;
            default:
                System.out.println("无效日期");
        }
    }
}

  在上面的示例中,我们根据用户输入的日期输出不同的信息。如果日期是1到5,就输出“工作日”,如果日期是6或7,就输出“周末”,其他情况下输出“无效日期”。

代码分析:

  这段代码是一个简单的Java程序,它通过使用 switch 语句来根据用户输入的日期判断是工作日还是周末。

  首先,程序创建了一个 Scanner 对象来接收用户的输入。然后,它要求用户输入一个日期。接下来,程序使用 switch 语句来判断用户输入的日期是哪一天。

  switch 语句根据 day 变量的值进行判断。如果 day 的值是 1、2、3、4 或 5,则输出 "工作日"。如果 day 的值是 6 或 7,则输出 "周末"。如果 day 的值不是上述任何一个值,则输出 "无效日期"。

  最后,程序结束运行。

  注意:此代码并没有进行错误处理,即用户输入非整数值时会抛出 InputMismatchException 异常。

总结

switch是Java中的一种条件语句,它根据某一个变量或表达式的值,跳转到匹配的case语句执行。以下是switch条件语句的总结:

  1. switch语句中的表达式只能是整型(byte, short, int或char)、枚举类型或字符串类型。

  2. switch语句中的case语句必须是常量表达式,即只能是字面量、final变量或enum常量。

  3. switch语句中的case语句的执行顺序是从匹配到的第一个case开始,直到switch语句结束或遇到break语句为止。

  4. switch语句中可以有多个case语句,但每个case语句的值必须唯一。

  5. switch语句中可以有一个default语句,表示当没有匹配的case时执行的语句。

  6. switch语句中的break语句用于跳出switch结构,如果没有break语句,则会继续执行下一个case语句。

  7. switch语句中的语句块可以是任意语句,包括复合语句和空语句。

  8. switch语句可以嵌套使用,在内部的switch语句中可以有外部switch语句中的case语句。

  总之,switch语句是一种方便和简洁的条件控制语句,可以根据变量或表达式的值来执行不同的语句块。在实际开发中,适当地使用switch语句可以提高代码的可读性和效率。

  ... ...

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

  同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!


目录
相关文章
|
14天前
|
设计模式 安全 Java
Java编程中的单例模式:理解与实践
【10月更文挑战第31天】在Java的世界里,单例模式是一种优雅的解决方案,它确保一个类只有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的实现方式、使用场景及其优缺点,同时提供代码示例以加深理解。无论你是Java新手还是有经验的开发者,掌握单例模式都将是你技能库中的宝贵财富。
20 2
|
9天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
12天前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
94 53
|
11天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
7天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
10天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
24 2
|
11天前
|
Java UED
Java中的多线程编程基础与实践
【10月更文挑战第35天】在Java的世界中,多线程是提升应用性能和响应性的利器。本文将深入浅出地介绍如何在Java中创建和管理线程,以及如何利用同步机制确保数据一致性。我们将从简单的“Hello, World!”线程示例出发,逐步探索线程池的高效使用,并讨论常见的多线程问题。无论你是Java新手还是希望深化理解,这篇文章都将为你打开多线程的大门。
|
11天前
|
安全 Java 编译器
Java多线程编程的陷阱与最佳实践####
【10月更文挑战第29天】 本文深入探讨了Java多线程编程中的常见陷阱,如竞态条件、死锁、内存一致性错误等,并通过实例分析揭示了这些陷阱的成因。同时,文章也分享了一系列最佳实践,包括使用volatile关键字、原子类、线程安全集合以及并发框架(如java.util.concurrent包下的工具类),帮助开发者有效避免多线程编程中的问题,提升应用的稳定性和性能。 ####
39 1
|
15天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
14天前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。