【问题标题】:Java - local variables in static methodJava - 静态方法中的局部变量
【发布时间】:2014-11-18 09:54:10
【问题描述】:

由于在静态方法中我们:

  1. 无法对非静态字段进行静态引用
  1. 那么静态方法中的局部变量应该static为 好吧。

但是根据这里的答案:Are local variables in static methods also static?

  1. 静态方法中的局部变量只是静态方法中的局部变量。它们不是静态的,而且在任何方面都没有特别之处。

我的推论 (2) 与取自 Ernest 答案 (3) 的陈述之间存在冲突,我无法解释。

谁能解释我的推论是否错误,为什么会这样?
如果我没记错的话,“静态方法中的局部变量也是静态的”这个问题的正确答案是什么?

编辑:局部变量成员变量(字段)或一个 static 是。

我只是想:
IF "static methods cannot make reference to non static field" AND "fields are variables" 那么 "variables in static methods are also static"
在静态方法中创建变量both local && static

谢谢。

【问题讨论】:

  • 为什么你认为局部变量是静态的?
  • 看来你需要检查that
  • @immibis 不要忘记field这个词只是用来描述member variables的命名约定。所以字段是变量类型,就像local variable 是变量类型一样。当然它们不是同一类型。
  • @Xipo 不要忘记短语member variable 只是用于描述fields 的命名约定(在Java 以外的某些语言中)。
  • @immibis 我同意你的观点,我唯一想指出的是字段是变量。

标签: java static


【解决方案1】:

A field cannot be referred by a static method 因为它属于 Class 的一个 Instance,因此它超出了静态方法的 范围.

局部变量永远不是静态的。 “局部”变量是指在代码块中声明和使用的变量,无论该代码块是静态初始化程序、类初始化程序还是方法/构造函数体。这些变量的作用域当然是由声明它们的代码块决定的。

不得与类(字段)中声明的变量混合,无论它们是实例变量(非静态;每个实例一个)还是类变量(静态;每个类一个)。

【讨论】:

    【解决方案2】:

    局部变量不是字段。

    【讨论】:

    • @Xipo 你暗示它:"Cannot make static reference to a non-static field" >> Then a local variable in a static method SHOULD be static as well。至少我是这么理解的。
    • 好吧,我明白了,我只是说我是字面上的,并没有暗示任何东西。我解释一下自己here
    【解决方案3】:
    1. 在方法中声明的变量存在于堆栈中。这些被称为局部变量
    2. 声明为静态的变量存在于类中。这些被称为变量。 (尽管它们通常被称为静态变量)
    3. 在类中声明为非静态的变量存在于特定实例中。这些被称为 Instance 变量。

    基本上每次您输入静态或非静态方法时,都会为您在该块中声明的每个变量保留内存。当块退出时,该内存被释放。 (从方法中退出,或退出 { } 块。局部变量的生命周期始终是您在其中声明它们的块。

    【讨论】:

      【解决方案4】:

      您的例外中的简单冲突是您希望局部变量是一个字段。这不是真的。

      局部变量只是存在于方法中。如果此方法是私有的、公共的、静态的、最终的还是其他任何方法都无关紧要。

      当一个字段与 Object 实例一起存在时。

      并且类中存在一个静态字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 2018-04-18
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多