为什么java不允许在方法中初始化静态变量?

时间:2014-07-30 18:09:50

标签: java c++

我知道C ++支持方法和java中的静态变量,静态成员在所有对象之间共享。但为什么这段代码无法在java中编译?

class Learn
{
 static int count = 0;
 Learn(int n)
 {
    count+=n;
 }
 public void method()
 {
    static int count =0;
 }
}
public class th
{
  public static void main(String a[])
  {
    Learn l = new Learn(4);
  }
}

4 个答案:

答案 0 :(得分:1)

它不允许您初始化方法中的静态变量,因为变量初始化方法在调用方法后被销毁,静态变量不仅可以在方法外部访问,而且可以在类外部访问。这两个想法是相互矛盾的。

答案 1 :(得分:0)

Java不允许您声明static局部变量,例如您在count中声明的method。如果要初始化static类变量,请在method中替换

static int count =0;

count = 0;

答案 2 :(得分:0)

在java中,声明方法外部的静态变量与在C ++中的方法中声明静态变量具有相同的效果。

我知道在C ++中使用静态外部方法会给变量“文件范围”,但java是不同的。

如果您需要几行代码来初始化变量,那么在类加载时使用匿名静态方法初始化

static {
    count = 0;
}

答案 3 :(得分:0)

与 C++ 不同,Java 不支持静态局部变量。因为在 Java 中,静态变量是类变量(对于整个类)。所有方法都在类内部声明,不能在类外部声明成员函数或任何变量。甚至 main() 方法也应该在一个类中。所以如果我们有静态局部变量(一个作用域仅限于函数的变量),就违背了静态的目的。因此编译器不允许静态局部变量。