滚雪球学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文档等海量资料,你想要的我都有!


目录
相关文章
|
30天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
10天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
14天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
49 12
|
11天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
92 2
|
2月前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
2月前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
27天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
27天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
50 3
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
45 2
|
2月前
|
安全 Java 开发者
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
69 1