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

Why java doesn't allow initializing static variable inside a method?

本文关键字:初始化 静态 变量 方法 java 不允许 为什么      更新时间:2023-10-16

我知道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);
  }
}

不允许在方法内部初始化静态变量,因为变量初始化方法在方法调用后被销毁,并且静态变量不仅可以在方法外部访问,而且可以在类外部访问。

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

static int count =0;

count = 0;

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

我知道在c++中,在方法之外使用静态会给变量"文件作用域",但java是不同的。

如果需要几行代码来初始化变量,那么在类加载

时使用匿名静态方法初始化它。
static {
    count = 0;
}

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