Java的switch语句块

news2024/11/27 10:42:56

说明

  • 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,那么会抛出NullPointerException
			case "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 null
	at 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 input
	at 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);
				// 继续往下执行,下一个状态是MIDDLE
			case MIDDLE:
				System.out.println("enter MIDDLE state");
				setState(DemoState.END);
				// 继续往下执行,下一个状态是END
			case 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.coloradmin.cn/o/867224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jQuery使用(超详细)

一、jQuery介绍 二、jQuery的简单使用 <head><meta charset"utf-8"><title></title><script type"text/javascript" src"../js/jquery-1.10.2.min.js"></script><script type"text/javascript"…

安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)

目录 前言&#xff1a; 一&#xff0c;安装 1.1打开官网JetBrains: Essential tools for software developers and teams点击 Developer Tools&#xff0c;再点击 Intellij IDEA 2.点击下载​编辑 3.选择对应的版本&#xff0c;左边的 Ultimate 版本为旗舰版&#xff0c;需要…

分割一切模型 Fast SAM C++推理部署---onnxruntime(有核心代码)

Fast SAM C推理部署—onnxruntime 核心源代码在结尾处 晓理紫 0 XX开局一张图&#xff0c;剩下… 本文记录只为日后更好学习 1 Fast SAM 简介 Fast SAM是仅使用SAM作者发布的SA-1B数据集的2%进行训练的CNN任意分割模型。FastSAM的性能与SAM方法相当&#xff0c;运行速度提高了…

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…

Linux基础篇(五)文件权限

目录 一、文件权限的概念 二、Linux命令ll的结果解析 三、Linux修改权限的两种方法 四、更改文件的拥有者和所属组 五、身份的判定 六、系统掩码 七、删除文件需要的权限 八、粘滞位 一、文件权限的概念 1.是什么&#xff1f; 简单地说就是什么身份的用户能对文件做什么事。 …

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

【密码学】密码棒密码

密码棒密码 大约在公元前700年,古希腊军队使用一种叫做scytale的圆木棍来进行保密通信。其使用方法是这样的:把长带子状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮纸后,上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。快速且不容…

STM32定时器TIM控制

一、CubeMX的设置 1、新建工程&#xff0c;进行基本配置 2、配置定时器TIM2 1&#xff09;定时器计算公式&#xff1a;&#xff08;以下两条公式相同&#xff09; Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…

选读SQL经典实例笔记23_读后总结与感想兼导读

1. 基本信息 SQL经典实例 SQL Cookbook [美]安东尼莫利纳罗&#xff08;Anthony Molinaro&#xff09; / 人民邮电出版社 / 2018-07 / 其他 人民邮电出版社,2018年7月出版第1版&#xff0c;2021年12月出版第2版 1.1. 读薄率 1版书籍总字数827千字&#xff0c;笔记总字数30…

sharedPreferences的使用之按钮状态切换的保存

什么是sharedPreferences&#xff1f;有什么用 SharedPreference是Android开发中一个轻量级的数据存储的方式&#xff0c;除了它还有SQLite数据库。它可以将数据以键值对的形式存放到文件中&#xff0c;在需要的时候再取出来使用。相比于去操作数据库&#xff0c;对于一些简单…

缓存穿透,击穿,雪崩之间的区别与联系

1、缓存数据基本流程 通常来说,我们是从数据库将数据查询出来之后,如果数据不为空,则将数据存储在缓存中,下次查询时就直接从缓存查询了,只有查询不到才会从数据库查询。 2、缓存穿透 核心在穿透两个字,穿透了,就说明在查询数据时没有遇到阻碍,直接就查询到了数据库。…

Spring-Cloud-Loadblancer详细分析_2

LoadBalancerClients 终于分析到了此注解的作用&#xff0c;它是实现不同服务之间的配置隔离的关键 Configuration(proxyBeanMethods false) Retention(RetentionPolicy.RUNTIME) Target({ ElementType.TYPE }) Documented Import(LoadBalancerClientConfigurationRegistrar…

记录--浏览器渲染15M文本导致崩溃怎么办

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 最近&#xff0c;我刚刚完成了一个阅读器的txt文件阅读功能&#xff0c;但在处理大文件时&#xff0c;遇到了文本内容过多导致浏览器崩溃的问题。 一般情况下&#xff0c;没有任何样式渲染时不会出现什…

《全生命周期眼健康管理》助力健康科学用眼

8月8日下午&#xff0c;烟台正大光明眼科医院眼健康管理中心张提主任受邀来到烟台市残疾人事务综合服务中心&#xff0c;为残联康复训练教师及相关工作人员进行了《全生命周期眼健康管理》讲座。 烟台正大光明眼科医院眼健康管理中心张提主任 “全生命周期眼健康”这一理念其宗…

u盘为什么提示格式化?u盘提示格式化怎么办

U盘是一种便携式存储设备&#xff0c;在使用U盘的过程中&#xff0c;有时候会出现提示需要格式化的情况。这种情况通常会让人担心自己重要的数据是否会丢失。那么&#xff0c;U盘为什么提示格式化&#xff1f;U盘提示格式化怎么办&#xff1f;在本文中&#xff0c;我们将探讨U盘…

80. 删除有序数组中的重复项 II

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;因为数组有序&#xff0c;相等的元素一定相邻&#xff0c;所以可以使用一个变量num统计相等元素的个数&#xff0c;如果当前元素和前一个元素相等&#xff0c…

【雕爷学编程】Arduino动手做(09)---火焰传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

【java面试题】不定义新变量的情况下交换两个Integer变量

题目&#xff1a; 不定义新变量的情况下交换两个Integer变量&#xff0c;完善swap&#xff08;&#xff09;方法&#xff1a; public class Main {public static void main(String[] args) {Integer a 10;Integer b 20;swap(a, b);System.out.printf("a is %d,b is %d&q…

TansUNet代码理解

首先通过论文中所给的图片了解网络的整体架构&#xff1a; vit_seg_modeling部分 模块引入和定义相关量&#xff1a; # codingutf-8 # __future__ 在老版本的Python代码中兼顾新特性的一种方法 from __future__ import absolute_import from __future__ import division fr…

制造业为什么要建设数字化供应链

数字化让越来越多的人走向了线上的世界&#xff0c;让那些拥有线上产品或提供线上服务的企业提供了更多流量。 但与此同时&#xff0c;传统制造业遭受了沉重的打击&#xff0c;考虑到防疫要求&#xff0c;很多工厂长期处于人手不足的状态&#xff0c;生产制造效率大幅降低&…