java中交换机的作用_在Java交换机中声明和初始化变量

2023-11-10

问题

我有一个关于Java交换机的疯狂问题。

int key = 2;

switch (key) {

case 1:

int value = 1;

break;

case 2:

value = 2;

System.out.println(value);

break;

default:

break;

}

场景1 - 当key为2时,它成功将值打印为2。

场景2 - 当我要评论value = 2incase 2:it时,说出局部变量值可能尚未初始化。

问题:

场景1:如果执行流程没有转到case 1:(当时为key = 2),那么它如何知道值变量asint的类型?

场景2:如果编译器知道值变量的类型为int,则它必须已访问到case 1:中的int value = 1;表达式(声明和初始化)。那么为什么sqawrk当我要发表评论value = 2incase 2:时,说当地变量值可能尚未初始化。

#1 热门回答(101 赞)

基本上,切换语句在范围方面是奇怪的。 Fromsection 6.3 of the JLS:

块(第14.4节)中局部变量声明的范围是声明出现的块的其余部分,从其自己的初始值设定项开始,并在本地变量声明语句中包含右侧的任何其他声明符。

在你的情况下,case 2在sameblockascase 1之后并出现在它之后,即使case 1将永远不会执行...所以局部变量在范围内并可用于写入,尽管你逻辑上从不"执行"声明。 (尽管初始化是,但声明并不是真正的"可执行"。)

如果你注释掉value = 2;分配,编译器仍然知道你指的是哪个变量,但是你不会通过任何为其赋值的执行路径,这就是你尝试读取时出现错误的原因任何其他未明确分配的局部变量。

我强烈建议你不要使用在其他情况下声明的局部变量 - 它会导致代码高度混乱,正如你所见。当我在switch语句中引入局部变量时(我很少尝试这样做 - 案例应该很短,理想情况)我通常更喜欢引入一个新的范围:

case 1: {

int value = 1;

...

break;

}

case 2: {

int value = 2;

...

break;

}

我相信这更清楚。

#2 热门回答(20 赞)

变量已声明(作为int),但未初始化(分配初始值)。想想这条线:

int value = 1;

如:

int value;

value = 1;

int valuepart在编译时告诉编译器你有一个名为value的变量,它是一个int。 value = 1part初始化它,但这发生在运行时,如果没有输入交换机的分支,则根本不会发生。

#3 热门回答(18 赞)

声明在编译时处理,不依赖于代码的执行流程。由于value是在switch块的本地范围内声明的,因此从声明的角度来看,它可以在该块中的任何位置使用。

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

java中交换机的作用_在Java交换机中声明和初始化变量 的相关文章

  • 阿里云上传图片的使用,AccessKey查看,入门级别

    阿里云上传图片的使用 可能很多人想上传图片到云端 却连阿里云怎么使用都还不会 我这个是入门级别的教程 一步一步来 我这里先附上我自己的前端上传图片教程代码vue前端直传阿里云 首先就是点击阿里云之后进行注册 注册就不贴了啊 阿里云是可以直接
  • css选择同时有两个类名的标签

    这个技巧比较厉害 记录一下 链接
  • Anaconda查看、创建、切换、删除虚拟环境

    Anaconda查看 创建 切换 删除虚拟环境 参考链接 1 查看已有虚拟环境 在命令行输入以下命令 conda info envs 这里的base 带星号的 代表基层或者当前虚拟环境 paddle是我新建的一个虚拟环境 2 创建新的虚拟环
  • 【微服务部署】五、Jenkins+Docker一键打包部署NodeJS(Vue)项目的Docker镜像步骤详解

    NodeJS Vue 项目也可以通过打包成Docker镜像的方式进行部署 原理是先将项目打包成静态页面 然后再将静态页面直接copy到Nginx镜像中运行 一 服务器环境配置 前面说明了服务器Nginx的安装和配置 这里稍微有些不同 但是因
  • Qlib股票数据获取与查看(Qlib学习1)

    文章目录 Qlib基本信息 数据使用方法 1 借助Qlib下载数据 2 查看相关数据 参考链接 Qlib基本信息 Qlib Github主页 https github com microsoft qlib Qlib quickstart h
  • AngularJS中(function(a,b){})(a,b)立即函数理解

    function window angular document 函数体 window window angular document 一 Scope 我们知道 Javascript是函数作用域 因此 这么写创建了一个 私有作用域 例如 f
  • QNX的license-key,试用qnx入门参考-QNX的密钥账号密码

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 e mail 174176320 qq com 老版本的QNX4 x QNX6 4 可以通过修改时间或重装系统进行继续试用使用 到了新版本
  • QVariant存放QWidget*

    今天看一个开源程序发现有个这样的用法 很新奇 记录一下 include widget h include
  • Docker搭建BWAPP靶场

    buggy web Application 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序 目的是帮助网络安全爱好者 开发人员和学生发现并防止网络漏洞 包含了超过100种漏洞 涵盖了所有主要的已知Web漏洞 包括OWASP Top
  • [完整]js实现放大镜效果

    实现 1 小盒子small当鼠标移入 将小img里src赋值给中等框src 将小盒子的src赋值给大盒子的背景 br 2 大盒子的展示与隐藏 经过大盒子展示大盒子 离开大盒子隐藏大盒子 br 3 显示隐藏layer 遮罩层 遮罩层跟随鼠标移
  • unity文字转语音插件(中文版)教程

    插件名RT Voice PRO 2020 4 10 不错的一款插件 我用2020版本UNITY进行测试使用的 可以读英文和中文 想要插件可以关注V公众号 unity风雨路 免费自取 或者直接去csdn下载 链接在这里 RT VoicePRO
  • 【千律】C++基础:string扩展工具箱的使用方法

    include
  • Micropython应用篇四---F407VE Black开发板IIC OLED1306

    Micropython应用篇四 F407VE Black开发板IIC OLED1306显示 最近一段时间做Keil例程比Micropython多很多 无论如何 Micropython Arduino作为嵌入式入门篇也发过一些文章 包括公司的
  • 科普什么是JS混淆加密解密以及其价值

    JavaScript 混淆加密是一种将 JavaScript 代码转换为不易被人阅读和理解的形式的技术 它通常用于保护代码的知识产权和减少被恶意修改的风险 使用 JavaScript 混淆加密有一些好处和价值 首先 混淆加密可以保护代码的知
  • SpringBoot 直接返回 Json格式对象(报错:返回对象为空{})

    文章目录 1 需求描述 2 代码展示 3 原因分析 4 解决方案 5 效果展示 6 结束语 1 需求描述 我们现在要干一个什么事情呢 我们要在浏览器输入一个请求地址 然后我们的后端就给我返回一个User对象即可 并且我希望以Json的格式返
  • Pycharm下载+安装+破解

    安装 进入到Pycharm官网下载区域 选择与系统对应的下载包然后点击下载 https www jetbrains com pycharm download section windows 破解 https blog csdn net u0
  • UnityVR--UIManager--UI管理2

    目录 前言 UIManger的实现 1 需要用到的变量和数据 2 在构造中的工作 3 初始化面板 4 显示面板 5 隐藏面板和隐藏所有面板 6 其他小工具 在场景中实现 1 不同面板的类型设置 2 场景中的设置 前言 接前篇 上一篇已经有了
  • 前后端分离的项目——图书管理系统(上)

    文章目录 项目搭建 使用elementUI 主体布局 后台服务搭建 实现分页模糊查询 后台CRUD 新增 修改 删除 表单校验和克隆模块 克隆出管理员模块 登录前后台 登录 全局异常处理 登录前端 数据安全 项目sql文件 点击下载 项目搭
  • 企业应如何无缝保护其云工作负载?

    企业为了保护自己的云环境 可能已经采取了保护云身份 强化云安全态势 配置强大的云访问控制等措施 然而 除此之外还需要做一件事 云工作负载保护平台 即CWPP 云工作负载保护平台会保护在企业的云上运行的工作负载 这些工作负载与构成云环境基础的

随机推荐

  • MyBatis-Plus代码生成器

    文章目录 1 在SpringBoot项目中导入Maven依赖 2 编写配置 3 运行后的效果 AutoGenerator 是 MyBatis Plus 的代码生成器 通过 AutoGenerator 可以快速生成 Entity Mapper
  • 金笛短信开发控件(API)

    http www sendsms cn download 金笛短信开发控件 JindiSMSControl OCX 点击放大 温馨提示 控件模块名称为 JindiSMSControl ocx 本控件使用时需要SmsCore dll和DBEn
  • 【ES】补充RestHighLevelClient

    目录 依赖 获取连接 阿里云提供的API 创建Index 创建mappings XContentBuilder 删除数据 指定ID 依赖
  • 夜莺V6ga8架构介绍-接近正式版的最新调整

    前言 本篇是夜莺监控V6最新版本 v6 0 0 ga8 的架构介绍 ga8版本开始和之前的v6版本在边缘机房部署场景 做了一点优化 去除了边缘机房中夜莺监控模块 n9e pushgw数据转发 n9e alert告警引擎 对中心节点机房中my
  • Eclipse打开HTML文件出现中文乱码

    一 问题描述 有时候在使用eclipse打开HTML文件时出现中文乱码问题 这是由于编码问题导致的 需要设置一下系统的编码就可以正常显示了 二 解决办法 解决步骤如图所示
  • 将一个目录下的所有文件的文件名存入一个数组中

    CSDN看到的 放在这里先 有时间研究一下 using System using System Collections using System IO namespace ZZ class ZZTest static void Main s
  • 修改GeoNode主页

    1 修改title变量值 项目使用了 Django 的 sites 框架 SITE NAME 来自于当前站点的设置 可以在 Django 管理后台的 Sites 部分找到并修改它 通常 你可以通过访问 http your domain co
  • 代码能力,程序员自我修养之基石

    目录 持续学习 阅读优秀的代码 练习编程 与他人合作 提升解决问题的能力 总结 在软件开发中 代码是程序员实现业务逻辑和功能的基础 是软件系统最基本的构成单元 对程序员的重要性不言而喻 在工作中 我们写的代码代表了自己的工作水平和编码能力
  • Linux终端执行shell脚本,提示权限不够

    在学习dubbo过程中 上传自己写的脚本 执行的时候提示 权限不够 从网上了解到是因为没有为脚本赋权限 解决方法是使用chmod命令为shell脚本赋予权限 chmod 777 service demo sh 参考 http blog cs
  • SQL巩固以及数据库、表结构优化

    SQL巩固 数据库 表结构优化 前言 对于初级程序开发工程师而言 SQL是很多人的弱项 为此我给大家来做一下总结 希望能够帮到你们 课程说明 1 介绍项目实战开发过程中常用的MySQL函数及常用语法 并且分析三种联合查询原理及如何使用 什么
  • STM32单片机初学8-SPI flash(W25Q128)数据读写

    当使用单片机进行项目开发 涉及大量数据需要储存时 例如使用了屏幕作为显示设备 常常需要存储图片 动画等数据 单靠单片机内部的Flash往往是不够用的 如STM32F103系列 内部Flash最多只能达到512KByte 假设要储存240 2
  • linux list 类型,Redis数据类型之List类型

    List类型及操作 List是一个链表结构 主要功能是push pop 获取一个范围的所有值等等 操作中key理解为链表名字 Redis的list类型其实就是一个每个子元素都是string类型的双向链表 我们可以通过push pop操作从链
  • java中HashSet的使用详解

    http jingyan baidu com article 48206aead61355216bd6b34a html 一 添加方法 1 add value 方法 可以向set中添加一个元素 注意 set中不能存储重复的元素 可以存储nu
  • C# VS2012操作word文档 (二).插入表格图片

    在上一篇文章 C VS2012创建word文档 一 中我们讲述了如何使用VS2012引用COM中Miscrosoft Word 14 0 Object Library实现创建文档 而这篇文章将讲述如何添加表格和图片 因为我在C 联系数据库做
  • 用c语言编写的经典程序,c语言入门的经典程序

    c语言入门的经典程序 对于C语言的初学者来说 有哪些经典程序需要学习的那么 下面小编为大家带来了c语言入门的经典程序 欢迎大家阅读 c语言入门的经典程序 1 输出 9 9 口诀 共 9 行 9 列 i 控制行 j 控制列 include s
  • 从0开始学Python(2)

    前言 还在被优先级搞得焦头烂额吗 还在为python中众多运算符傻傻分不清楚而困惑吗 在这里将会对python中的运算符进行深度刨析 为你解惑 这里是目录 前言 还在被优先级搞得焦头烂额吗 还在为python中众多运算符傻傻分不清楚而困惑吗
  • show profile和全局查询日志

    文章目录 1 show profile 2 全局查询日志 1 show profile show profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况 可以用于SQL的调优的测量 默认情况下 参数处于关闭状态 并保存最
  • java.io.FileNotFoundException异常的问题

    这个异常抛出的两种情况 1 拒绝访问 2 系统找不到指定的路径 在构造一个File对象时 指定的文件路径是什么都可以 就算不存在也能够构造File对象 但是现在你要对文件进行输入和输出操作的时候 也就是InputStream和OutputS
  • 论用C语言写一个PE解释器(3)

    论用C语言写一个PE解释器 3 前情提要 在上一篇文章里 我们提到了PE解释器的基本执行流程 但是还有很多细节的部分没有提到 而我们现在就来完善这些细节 一 关于解释文件用的指针 可能在上篇文章中 有读者会有疑问 可不可以用FILE文件指针
  • java中交换机的作用_在Java交换机中声明和初始化变量

    问题 我有一个关于Java交换机的疯狂问题 int key 2 switch key case 1 int value 1 break case 2 value 2 System out println value break defaul