Java的switch语句块

说明

  • Java的switch语句块可以用于多个分支的判断执行。
  • 每个case分支执行完后,要么退出方法体(用return语句)、要么退出switch语句块(用break语句)、要么继续往下执行。
  • 但如果一个case执行完后,要继续执行下一个case,一定要在本case执行完,下一个case执行前,加上注释,注明为什么要继续往下执行。因为通过注释的过程,就表示作者不是忘记加break或者return了,而是考虑到往下继续执行的合理性了。如果不加注释,是否忘记了就难以判断了,过了一段时间,可能连作者本人也回忆不起来为什么不加break或者return了,要再花时间去研究逻辑。
  • 如果一个case语句块执行完而后面没有加break或者return语句,会继续往下执行后面的case语句块,不会再判断switch后面括号中的条件。
  • 在一个switch语句块内,要在最后包含一个default语句块,哪怕default语句块中没有任何代码。
  • switch(expression):其中expression称为选择表达式,它的值必须是char、byte,、short、int、Character、Byte、Short、Integer、String、enum中的一种,否则会编译报错。
  • 如果 switch(expression)语句中选择表达式expression的值是null,那么会抛出一个NullPointerException异常,switch语句块中的每个case都不会执行。

示例

每个case执行完都有break语句

package com.thb;public class Demo1 {public static void main(String[] args) {int mark = 1;switch (mark) {case 1:System.out.println("enter branch one");break;case 2:System.out.println("enter branch two");break;case 3:System.out.println("enter branch three");break;default:System.out.println("enter branch default");break;}}
}

运行输出:

enter branch one

case执行完忘了加break语句,也没有注释说明

package com.thb;

public class Demo1 {public static void main(String[] args) {int mark = 1;switch (mark) {case 1:System.out.println("enter branch one");				case 2:System.out.println("enter branch two");				case 3:System.out.println("enter branch three");				default:System.out.println("enter branch default");break;}}
}

运行输出:

enter branch one
enter branch two
enter branch three
enter branch default

从输出可以看出,开始判断的时候第一个分支满足条件,执行了该case语句块,但因为忘记加break或者return语句了,继续往下执行,看起来应该与作者的本意不符了。

switch(expression)语句中选择表达式expression的值是null,会抛出一个NullPointerException异常

package com.thb;public class Demo1 {public void process(String str) {switch (str) {// 这个分支肯定不会进来。因为如果str是null,那么会抛出NullPointerExceptioncase "null":System.out.println("enter branch null");break;case "one":System.out.println("enter branch one");break;case "two":System.out.println("enter branch two");break;default:System.out.println("enter branch default");break;}	}public static void main(String[] args) {Demo1 demo = new Demo1();String str = null;demo.process(str);}
}

运行输出:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "str" is nullat com.thb.Demo1.process(Demo1.java:7)at com.thb.Demo1.main(Demo1.java:26)

如果switch(expression)语句中选择表达式expression的类型是String,程序中要先进行null判断

package com.thb;public class Demo1 {public void process(String str) throws Exception {if (str == null) {throw new Exception("illegal input");}switch (str) {case "one":System.out.println("enter branch one");break;case "two":System.out.println("enter branch two");break;default:System.out.println("enter branch default");break;}	}public static void main(String[] args) {Demo1 demo = new Demo1();String str = null;try {demo.process(str);} catch (Exception e) {			e.printStackTrace();}}
}

运行输出:

java.lang.Exception: illegal inputat com.thb.Demo1.process(Demo1.java:7)at com.thb.Demo1.main(Demo1.java:27)

如果switch(expression)语句中选择表达式expression的类型是long,编译报错

在这里插入图片描述

case语句执行完后继续往后执行,但加上了明确的注释说明

package com.thb;public class Demo1 {private DemoState state;public Demo1() {this.state = DemoState.BEGIN;}public DemoState getState() {return this.state;}public void setState(DemoState state) {this.state = state;}public void process(DemoState state) {switch (getState()) {case BEGIN:System.out.println("enter BEGIN state");setState(DemoState.MIDDLE);// 继续往下执行,下一个状态是MIDDLEcase MIDDLE:System.out.println("enter MIDDLE state");setState(DemoState.END);// 继续往下执行,下一个状态是ENDcase END:System.out.println("enter END state");				break;default:throw new Error();}}public static void main(String[] args) {Demo1 demo = new Demo1();demo.process(DemoState.BEGIN);}
}

运行输出:

enter BEGIN state
enter MIDDLE state
enter END state

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63278.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Android 上使用机器学习套件检测人脸

须知事项 此 API 需要 Android API 级别 19 或更高级别。确保应用的 build 文件使用的 minSdkVersion 值不小于 19。 请务必在您的项目级 build.gradle 文件中的 buildscript 和 allprojects 部分添加 Google 的 Maven 代码库。 将 Android 版机器学习套件库的依赖项添加到模…

Linux平台下搭建GB28181服务器(WVP+ZLMediakit)

文章目录 什么是GB28181平台依赖项搭建步骤配置Redis和MySQL配置ZLMediakit配置WVP 使用效果封装成Docker镜像 什么是GB28181 GB28181(国标28181),全称为《中华人民共和国公共安全视频监控联网系统技术要求》,是中国国家标准委员会发布的一个针对公共安…

springboot+mybatis+mybatis-plus对crud项目进行改进

springbootmybatis实现简单的增、删、查、改https://blog.csdn.net/heyl163_/article/details/132197201上一篇文章,已经详细地介绍了怎么通过springboot项目整合mybatis实现简单的数据库表的增删改查功能,是最简单的springboot项目的结构。所以有很多问…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式? 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵,或者您没有技术知识来实现​​它。 在本文中,我们将列出您所需的在线服务的所有设备,并教您…

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…

Map中compute、putIfAbsent、computeIfAbsent、merge、computeIfPresent使用

目录 putIfAbsent computeIfAbsent computeIfPresent compute merge putIfAbsent 解释&#xff1a;【不存在则添加】&#xff0c;如果map中没有该key&#xff0c;则直接添加&#xff1b;如果map中已经存在该key&#xff0c;则value保持不变 default V putIfAbsent(K key,…

Linux文件属性与权限管理(可读、可写、可执行)

Linux把所有文件和设备都当作文件来管理&#xff0c;这些文件都在根目录下&#xff0c;同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情&#xff1a; 1、每行代表一个文件&#xff0c;每行的第一个字符代表文件类型&#xff0c;linux文件类型包括&am…

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

4月官宣创业&#xff0c;6月15日发布第一款7B开源模型&#xff0c;7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度&#xff0c;8月8日&#xff0c;百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B&#xff08;以下简称“53B”&a…

企业产品手册5大核心功能,附产品手册在线制作工具Baklib

企业产品手册的5大核心功能 企业产品手册是企业向用户传达产品信息、功能和使用方法的重要工具。下面将介绍企业产品手册的五个核心功能。 1. 产品介绍和特点展示 产品手册的首要功能是介绍和展示企业的产品。它应该提供清晰、详细的产品信息&#xff0c;包括产品的特点、优势…

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去&#xff0c;但是从2023年上半年的情况来看&#xff0c;我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上&#xff0c;工信部人士透露&#xff0c;截至今年6月底&#xff0c;我国5G基站累计达到293.7万个&…

InVEST模型使用

第一天&#xff1a; 1. 生态系统服务理论联系实践案例讲解 2. InVEST模型的开发历程、不同版本的差异及对数据需求的讲解 3. InVEST所需数据的要求&#xff08;分辨率、格式、投影系统等&#xff09;、获取及标准化预处理讲解 4. InVEST运行常见问题及处理解决方法讲解 5.…

新疆大学841软件工程考研

1&#xff0e;软件生产的发展经历了三个阶段&#xff0c;分别是____、程序系统时代和软件工程时代时代。 2&#xff0e;可行性研究从以下三个方面研究每种解决方法的可行性&#xff1a;经济可行性、社会可行性和_____。 3&#xff0e;HIPO图的H图用于描述软件的层次关系&…