java 中变量的作用域

Scope of a variable in java

提问人:Amritesh Yadav 提问时间:9/28/2023 更新时间:9/28/2023 访问量:92

问:

代码和错误根据变量范围 m(未初始化)不应该在其中有值,这是正确的,我得到了一个错误,但是当你初始化一个变量,然后在迭代结构内的条件结构中使用它时,它可以得到你提供给它的任何值。

为什么?无论其初始化如何,变量范围都不应该保持不变吗?

基本上,如果我声明 int a;并在 if 条件中给它一个值,该条件位于 for 循环中,它不会获得该值并且保持未初始化状态,但如果初始化它,则 int a=0;然后在 for 循环内的 if 条件中给它任何值,它确实得到了我给它的值。

Java 变量 范围 初始化 声明

评论

2赞 David 9/28/2023
欢迎来到 Stack Overflow!相关代码和错误消息需要以文本形式包含在您的问题中,而不是文本图片。仅仅链接到屏幕截图会使人们更难帮助您。要了解有关此社区的更多信息以及我们如何为您提供帮助,请从导览开始并阅读如何提问及其链接资源。
1赞 tgdavies 9/28/2023
请编辑您的问题,以文本形式包含代码和错误消息,而不是图像。
2赞 David 9/28/2023
至于问题......这与范围完全无关。编译器不会检查您的逻辑并确定是否初始化任何给定的变量。一个条件在逻辑上是否保证为真并不重要。编译器将其视为一个条件,并告诉您该条件中的操作可能不会发生。这里的要点是,如果你有一个逻辑条件,你知道在所有情况下都永远是正确的,那么重构代码以删除不必要的条件。
2赞 9/28/2023
变量范围不会根据初始化变量的方式而改变,并且与错误无关。您的错误只是编译器无法保证您的代码可以采用的任何可能路径都会导致变量被初始化,因为您只在可能根本无法到达的条件块中初始化它。
1赞 Community 9/28/2023
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

-1赞 Diego Moran 9/28/2023 #1

我将向您推荐以下文章,您也可以在这里找到示例:

https://www.baeldung.com/java-error-variable-initialized#:~:text=This%20error%20occurs%20only%20for,the%20use%20of%20uninitialized%20variables

文章摘要: 如果我们声明一个没有初始值的局部变量,我们将得到一个错误。此错误仅发生在局部变量上,因为 Java 在编译时自动初始化实例变量(它为整数设置 0,为布尔值设置 false,以此类推)。但是,局部变量需要默认值,因为 Java 编译器不允许使用未初始化的变量。

我希望它有所帮助

评论

0赞 k314159 9/28/2023
那篇文章太简单了。局部变量必须在使用前初始化。这意味着,如果不使用它们,则不必初始化它们。例如,如果它们仅在内部块中使用,则只需在该内部块中初始化它们。此外,它们不必在与其声明相同的语句中初始化。它们可以初始化,例如,在声明之后,例如 链接的文章似乎没有说得很清楚。int n; if (cond) n = 1; else n = 2;
0赞 Community 10/3/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。