我知道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);
}
}
答案 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() 方法也应该在一个类中。所以如果我们有静态局部变量(一个作用域仅限于函数的变量),就违背了静态的目的。因此编译器不允许静态局部变量。