在Java中,静态方法内部声明的变量本身是静态的吗?

Tho*_*son 16 java static

假设如下:

private static boolean A()
{
  int parsedUntil = 0;
  ...
  ...
  ...
}

parsedUntil被认为是一个静态变量吗?我注意到我不能在这个静态函数中声明它是静态的.

后续问题:我读到静态变量只会被初始化一次.这是否意味着我第一次调用函数A()时该值将被设置为零,但每隔一次我调用A(),该行被省略?

Jon*_*eet 25

不,它不是静态变量.这是一个局部变量.方法中声明的任何变量都是局部变量.如果你想要一个静态变量,你必须在方法之外声明它:

private static int parsedUntil = 0;
Run Code Online (Sandbox Code Playgroud)

无法声明只能在单个方法中使用的静态变量.

  • 这都是关于范围的。作用域是方法的本地范围,与方法类型无关。 (2认同)
  • @Robin:不,这是关于终生的.在其他语言中,"静态本地"可以具有单一方法范围但是静态寿命,这有时是有用的; 在这两种情况下,范围都是方法的本地范围,但生命周期是不同的. (2认同)

Sea*_*oyd 6

不,A()是一个静态方法,并且parsedUntil是A内的局部变量.

类似static的修饰符在局部变量中无效(仅final允许afaik)

后续问题:我读到静态变量只会被初始化一次.

真正

这是否意味着我第一次调用函数A()时该值将被设置为零,但每隔一次我调用A(),该行被省略?

由于parsedUntil不是静态字段,而是静态方法中的局部变量,因此情况并非如此.


Bla*_*iev 5

static 变量不能在方法内部声明 - 它们只能是类的成员,并且在加载类时会初始化它们.