Java:为什么需要初始化原始局部变量?

2023-12-11

public class Foo {
    public static void main(String[] args) {
        float f;
        System.out.println(f);
    }
}

print 语句会导致以下编译时错误,

局部变量 f 可能尚未初始化

如果 Java 中的原语已经有一个默认值(浮点数 = 0.0f),为什么我需要定义一个?


Edit:

所以,这有效

public class Foo {
    float f;
    public static void main(String[] args) {
        System.out.println(new Foo().f);
    }
}

感谢大家!


因为它是一个局部变量。这就是为什么没有给它分配任何内容:

局部变量略有不同;编译器从不分配 未初始化的局部变量的默认值。如果你不能 在声明局部变量的地方初始化它,请确保 在尝试使用它之前为其分配一个值。访问一个 未初始化的局部变量将导致编译时错误。

编辑:为什么 Java 会引发此编译错误?如果我们看一下IdentifierExpression.javaclass 文件中,我们会找到这个块:

...
if (field.isLocal()) {
            LocalMember local = (LocalMember)field;
            if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
                env.error(where, "invalid.uplevel", id);
            }
            if (!vset.testVar(local.number)) {
                env.error(where, "var.not.initialized", id);
                vset.addVar(local.number);
            }
            local.readcount++;
        }
...

就像声明的那样 (if (!vset.testVar(local.number)) {),JDK 检查(用testVar) 如果变量被赋值 (Vset的源代码我们在哪里可以找到testVar代码)。如果不是,则会引发错误var.not.initialized from a 属性文件 :

...
javac.err.var.not.initialized=\
    Variable {0} may not have been initialized.
...

Source

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

Java:为什么需要初始化原始局部变量? 的相关文章

随机推荐

  • 读取 ID3 标签的最佳库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 哪个库是目前最全面 功能最
  • Jupyter Notebooks 和 Papermill 辅助的 Airflow 中的 ETL

    所以我的问题是 我在 Airflow 中构建 ETL 管道 但首先在 Jupyter 笔记本中真正开发和测试提取 转换和加载功能 因此 我最终总是在 Airflow Python 操作员代码和 Jupyter 笔记本之间来回复制粘贴 效率非
  • Redux 不应该阻止重新渲染吗?

    我有一个List显示多个的组件Item成分 List从 Redux 存储获取其数据 当商店更新时 例如因为我删除了一个项目 所有Items 被重新渲染 这是为什么 我知道我可以使用shouldComponentUpdate 以防止新的渲染
  • NIB 文件中的静态表单元

    是否可以创建一个包含带有自定义静态单元格的表格视图的 nib 文件 我想创建一个包含所有静态内容的类似表单的表格视图 但我目前没有使用故事板 我能够在应用程序的默认情节提要中找到内容类型菜单 但我使用的是 Nib 当我创建 UIViewCo
  • 每行写入新的 CSV 文件 (JAVA)

    我有以下代码 public static void main String args throws IOException File being read String fileName src data Belgium csv Strin
  • 我在验证代码时遇到问题。我需要循环代码,直到输入有效答案

    我正在努力处理这段 Python 代码 问题是 当用户输入错误时 我需要我的代码继续循环 直到他们输入有效的答案 这就是代码的工作原理 提示用户选择饮料 然后选择菜肴 然后选择一道菜 此后 程序显示用户想要的顺序 Order No drin
  • PHP 致命错误:不在对象上下文中时使用 $this

    我有一个问题 我正在编写一个没有框架的新 Web 应用程序 In my 索引 php我在用着 require once load php And in load php我在用着require once class php 加载我的类 php
  • 使用 swagger 的 Web API 文档

    我是 swagger 的新手 我看过一些在线文档来将 Swagger 实现到我的 webapi 并使用 SwaggerConfig 的一些属性进行自定义 这是我的要求 我需要仅在基于 API Key 文本框的值单击 探索 按钮时显示招摇文档
  • 在一行中引用多个工作表

    我想知道是否有一种方法可以在 Excel VBA 中的一行中引用多个工作表 我知道您可以通过以下方式引用多个范围 列 行 Range G1 G5 G6 G10 H5 H10 etc 我希望能够对我尝试过的床单做同样的事情 Sheets Sh
  • 是否可以在网络共享上的 NuGet 本地源中同时托管常规包和符号包?

    首先 我对 NuGet 还很陌生 我在工作中开发了许多内部 C 桌面应用程序 它们之间共享一些通用代码 我一直在从使用项目引用切换到创建私有 NuGet 包并将它们托管在共享网络文件夹中的本地源中 我只接触了几天 但到目前为止 我已经成功地
  • Hive/Hadoop 间歇性故障:无法将源移动到目标

    已经有一些关于Hive Hadoop 无法移动源 错误 其中许多都指向许可问题 然而 在我的网站上我看到了同样的错误 但我很确定它与权限问题无关 这是因为该问题是间歇性的 一天有效 但另一天失败 因此 我更深入地研究了错误消息 它抱怨未能从
  • 在 Visual Studio 中设置嵌入互操作类型 true 和 false 有什么区别?

    在 Visual Studio 中 向项目添加一个引用时 属性窗口有一个选项Embed Inteop Types 我们应该将其设置为True or False 有什么不同 由于我们有很多项目 其中一些项目被设置为参考False 其他人被设置
  • 如何在 C# 中读取 msExchMailboxSecurityDescriptor 属性

    我正在尝试读取 AD 中的所有用户属性 如何阅读msExchMailboxSecurityDescriptorC 中的属性 我使用了以下代码 但出现了强制转换错误 欢迎大家提出意见 DirectoryObjectSecurity oSec
  • 本地构建 jekyll 站点并将其推送到 github 页面

    我在我的网站上使用 gem jekyll assets 但在推送到 github 页面时失败 我读过 解决这个问题的方法是在本地构建网站 构建得很好 然后将其推送到 github 页面 然而 人们这样做的例子是使用项目存储库 并将站点推送到
  • 重定向附加到同一日志文件的标准和错误输出

    我需要将多个进程的标准输出和错误日志收集到一个日志文件中 所以每个输出都必须append到此日志文件 我想用这样的行调用所有作业 p start process myjob bat redirectstandardoutput logfil
  • 使用google plus API是否可以获取gmail联系人

    在我的应用程序中 我想获取我的 Gmail 联系人 在我的应用程序中我已经集成了 Google API 所以我只需要知道我可以使用相同的 API 访问我的 Gmail 联系人吗 或者我需要集成 Gmail API 请帮助我 我对此很陌生 我
  • 在 GitHub 存储库中创建标签

    我在 GitHub 中有一个存储库 我需要tag it 我在 shell 中标记了 但是在GitHub 它没有显示 我还需要做其他事情吗 我在shell中使用的命令是 git tag 2 0 现在当我打字时git tag表明 2 0 所以看
  • panda的多索引有什么好处?

    所以我了解到我可以使用 DataFrame groupby 而无需使用 MultiIndex 来进行子采样 横截面 另一方面 当我在 DataFrame 上有 MultiIndex 时 我仍然需要使用 DataFrame groupby 进
  • 在 vue.js 中安装 vuetify 后,新项目无法编译

    我在 vue js 中遇到问题 我使用 webstorm 创建了一个新项目 它运行完全没有问题 我可以看到 vue 徽标 在下一步中 我想安装 vuetify 但出现如下错误 编译失败 src plugins vuetify js 找不到模
  • Java:为什么需要初始化原始局部变量?

    public class Foo public static void main String args float f System out println f print 语句会导致以下编译时错误 局部变量 f 可能尚未初始化 如果 J