静态变量:类变量是不是为类的每个对象单独创建的 实例变量:也是类变量,但是分别为每个对象创建 以上定义仅供参考。
请解释为什么我在这个类声明中遇到错误。我知道这只是因为我没有初始化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.
请解释我为什么静态成员使用默认值初始化,而局部变量不是。
答案 0 :(得分: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);
}
}
答案 1 :(得分:2)
如果你想知道Java为什么会这样说的背景,那么它必须具备静态代码分析的极限。从堆栈分配的内存(这是本地变量所在的位置)可以由编译器确认,以便在使用前进行初始化。堆分配存储(静态变量,实例变量)不是这样。这就是为什么JLS要求实现在暴露指向它之前始终将任何堆存储清零的原因。
答案 2 :(得分:1)
必须始终使用值初始化局部变量。对于非局部变量(即实例或静态变量),默认值定义为相应类型的空值(null
,零或false
)。
答案 3 :(得分:0)
在java中, Instance Variables (即类变量)初始化为默认值。 但局部变量(即方法变量)不能在没有初始化的情况下使用......
class static_example{
static int x;
public static void main(String args[])
{
System.out.println(x);
}
}
在上面的例子中,x在Class范围内声明...所以它已经初始化为默认值0,所以它没有给出任何错误..