为什么我不能在 Java 中声明同一个变量两次?

2023-12-19

这里有类似的问题,但他们并没有真正回答我的问题。

所以我很好奇为什么我们不能在Java中声明同一个变量两次?

例如:

  int a = 4;
  int a = 6;

这在 Java 中实际上行不通。

然而在 javascript 中,这实际上是有效的:

var a = 1;
var a = 2;

在javascript中,人们说声明立即被移到开头,这样它就变成了这样:

var a;
a = 1;
a = 2;

简单、明显的答案是因为编译器不允许你这么做。但现在让我们更进一步——为什么需要这样做?

这里的原因是两次声明一个变量是错误的标志。它通常意味着以下三件事之一:

  1. 您的变量名称不够具体。也许你用过int length两次它就会对你吠叫。例如,您可能应该让您的名称更具体地说明它所包含的长度int originalLength and int extendedLength当复制数组或其他东西时。
  2. 你的方法太长了。为什么你的方法如此长以至于需要两个相同的变量?您可能会重复代码,因此请将其合并到一个方法中。
  3. 你还没有真正想好你的方法。这是第 2 点的扩展,但事实是您应该在编写方法之前决定它的用途。如果您添加一个已经存在的变量,则可能意味着您尚未确定该方法到底在做什么。

其中每一个都是主要的代码味道,并且可能是未来错误的根源。 (而且就在不久的将来!)在每种情况下,允许您声明一个变量两次都会导致歧义,如果它阻止您进行编译,则可以避免这种歧义。

现在,这是否意味着没有可能会带来好处的情况?当然。可能有。也许您已经了解了所有基础,并且绝对确定可以重用该变量。在这种情况下,只需重新分配它而不是重新声明它。就我个人而言,我不建议这样做,但如果你想的话,射门是你的脚。 :)

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

为什么我不能在 Java 中声明同一个变量两次? 的相关文章

  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • MySQLWorkbench正向工程错误

    我正在 MySql Workbench 8 0 中处理模型 当我单击正向工程并尝试生成我的模型的脚本时 我得到 Executing SQL script in server ERROR Error 1064 You have an erro
  • 根据列名称列表对列进行子集化,并将该列放在其前面

    我有一个更大的数据集 遵循相同的顺序 一个唯一的日期列 数据 唯一的日期列 日期等 我不仅尝试按名称对数据列进行子集化 还尝试对唯一的日期列进行子集化 下面的代码根据名称列表选择列 这是我想要的一部分 但是关于如何在子集列之前获取该列有什么
  • 存储使用 Atlassian SourceTree 所做的更改

    我的项目中更改了很多文件 我想隐藏 2 个文件 但我有点害怕犯错误 因为我从未这样做过 If i would stash now will it only stash the 2 staged files 如果我不标记 保留分阶段更改 它会
  • 如何在 MongoDB 上按字符串长度对结果进行排序

    我可以在mysql上轻松完成 select from TABLE order by length FIELD asc 我怎样才能在 MongoDB 上做到这一点 MongoDB 3 4 引入了 strLenCP https docs mon
  • 配置“--prefix”选项进行交叉编译

    我应该通过哪条路径 prefix进行交叉编译时的选项 我应该指定构建机器上的路径还是目标平台上的路径 假设我将代码构建到 home me arm build target fs usr 之后我将文件复制到我的目标平台 它们将位于 usr 我
  • 通过 AJAX 的跨源资源共享 (CORS)

    我知道关于这个主题有很多问题 一段时间以来我一直在努力解决这个问题 请让我了解一下这个具体案例 My Goal 我正在尝试从以下 URL 获取 JSON 数据 https www icims com bellworks https www
  • 纯 JavaScript 中的 jQuery live() ?

    我正在尝试用纯 JavaScript 实现 jQuery live 函数的功能 这里有人可以帮忙吗 Thanks 这是一个启动的小例子 document onclick function evt evt evt window event v
  • JS 代理模式

    我使用此代码来覆盖 window alert 函数 该函数用 r n 替换中断 它在 Firefox 中运行良好 但在 IE 中当然不行 我收到错误 不支持属性或方法 function var proxied window alert wi
  • CMake检查主项目是否被调用

    我有这样的项目目录设计 Main CMakeLists txt subproject1 CMakeLists txt subproject2 CMakeLists txt 如果 subproject1 cmake 被主项目调用 或者作为独立
  • 根据字段值增量并创建记录

    访问2003 最终 我需要创建一个用于打印标签 样品 ID 罐 x of x 的报告 我的桌子上有样品 ID 和罐子数量 是否可以创建一个查询 为我提供 3 个字段 样品 ID 罐号 罐数 其中罐号根据罐数以增量方式创建记录 Query S
  • Java - 编译错误方法无法调用

    我必须使用测试工具编译我的代码 但是 当该测试工具调用我的方法时 我收到此错误 Course 类中的 getCourseDetails 方法不能应用于给定类型 必需 java lang String int java lang String
  • Typescript 将元组的类型元组转换为元组(展平元组)

    我有这个 Type T Params lt Tuple1 Tuple2 gt eg string number 制作方法 压扁 Type Flatten
  • 如何锁定 cytoscape.js 节点在其父节点内的位置

    我想锁定节点相对于其父复合节点的位置 这样 如果我抓取并拖动父节点 子节点会随之移动 但子节点不能单独抓取 如果我将子项设置为不可抓取和 或锁定 那么它不会与其父项一起移动 但如果我不这样做 它可以被单独拖动 这是我不想要的 这可以做到吗
  • 如何将参数(名称)传递给函数工厂?

    我需要构建许多带有许多不同参数的函数 尽管它们共享许多代码和结构 为了避免重复 我想我应该聪明地为自己构建一个函数工厂 又名闭包 我不知道如何在函数工厂内传递函数参数 我的用例是一堆 S3 构造函数 所有这些函数都共享相同的验证机制 所以我
  • 如何将测试用例从 Excel 导入到 VSTS/Azure DevOps

    我有很多测试用例当前位于 Excel 中 我需要将它们迁移到 VSTS Azure DevOps 有人可以推荐我一个好方法吗 这是一种手动方式 但也许对您有用 在 IE 或 Edge 上 您可以在测试计划中尝试网格视图 然后复制 粘贴测试用
  • Java LibGDX 如何解析 JSON?

    我有一个 json 文件 内容如下 players name hp 100 name hp 120 weapons name Desert Eagle price 100 name AK 47 price 150 如何将其解析为武器数组 我
  • 获取和转换与条件格式

    我正在尝试使用conditional formatting的输出Get Transform询问 Office 365 Excel 2016 32 位 Windows 10 专业版 64 位 但是 当刷新查询时 条件格式不仅仅是扩展 收缩以影
  • 如何将 pandas DataFrame 表保存为 png

    我构建了一个结果的 pandas 数据框 该数据框充当表格 有 MultiIndexed 列 每行代表一个名称 即index name1 name2 创建 DataFrame 时 我想显示这个表格并将其保存为 png 或任何图形格式 目前
  • Angular ui grid双击事件设置

    所以我试图让我的 Angular UI 网格在整行上注册双击事件以打开模式 我可以从烤面包开始 然后从那里开始 这是我根据在线各种演示和示例得出的最接近的结果 但我似乎无法让它发挥作用 控制器 scope gridHandlers onDb
  • 为什么我不能在 Java 中声明同一个变量两次?

    这里有类似的问题 但他们并没有真正回答我的问题 所以我很好奇为什么我们不能在Java中声明同一个变量两次 例如 int a 4 int a 6 这在 Java 中实际上行不通 然而在 javascript 中 这实际上是有效的 var a