0

静态变量:是类变量,它们不是为类的每个对象单独创建的。
实例变量:也是类变量,但分别为每个对象创建。
以上定义仅供参考。

请解释为什么我在这个类声明中出错。我知道这只是因为我没有初始化 x。

class non_static{
public static void main(String args[])
{
int x;
System.out.println(x);

}
}

但是这个类声明完全没问题。

class static_example{
static int x;
public static void main(String args[])
{
System.out.println(x);
}

}

这个程序的输出是0。

请解释一下为什么静态成员使用默认值初始化,而局部变量则没有。

4

4 回答 4

5

它与静态声明与实例声明无关。是局部声明,没有默认值,未初始化使用时会报错。

public class Example {
    private static int stattic;
    private int instancee;

    public void someMethod() {
        System.out.println("I am static and 0: " + stattic);
        System.out.println("I am not static and 0: " + instancee);

        int locall;

        System.out.println("I am causing an error because I have not been initialized: " + locall);
    }
}
于 2012-07-12T18:26:34.683 回答
2

如果你想知道为什么 Java 会这样指定它的背景,它必须与静态代码分析的限制有关。从堆栈分配的内存(这是本地变量所在的位置)可以由编译器肯定地确认,以便在使用前进行初始化。堆分配存储(静态变量、实例变量)并非如此。这就是为什么 JLS 要求实现在公开指向它的指针之前始终将任何堆存储清零的原因。

于 2012-07-12T18:35:47.503 回答
1

局部变量必须始终使用一个值进行初始化。对于非局部变量(即实例或静态变量),默认值定义为相应类型的空值(null、零或false)。

于 2012-07-12T18:30:53.187 回答
0

在java中,实例变量(即类变量)被初始化为它们的默认值。 但是局部变量(即方法变量)不能在没有初始化的情况下使用......

class static_example{
static int x;
public static void main(String args[])
{
System.out.println(x);
}

}

在你上面的例子中,x 是在 Class 范围内声明的......所以它已经被初始化为其默认值 0,所以它没有给出任何错误..

于 2012-07-12T18:31:24.060 回答