2012-07-12 159 views
0

静态变量:是否为每个类的对象分别创建类变量和它们。
实例变量:也是类变量,但是分别为每个对象创建。
以上定义仅供参考。静态声明和非静态声明之间的区别

请解释一下为什么我在这个类declaration.I得到错误知道那只是因为我还没有初始化的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

哦,但实例变量是。 *另一方面,本地*变量不 - 看你的定义是哪里.. – Voo 2012-07-12 18:26:58

回答

2

如果你想知道为什么Java的指定它这样的背景下,必须做王氏静态代码分析的极限。从堆栈分配的内存(这是本地变量的位置)可以被编译器肯定地确认,以便在使用之前进行初始化。与堆分配存储不同(静态变量,实例变量)。这就是为什么JLS要求实现在暴露指针之前始终将任何堆存储清零。

+0

thanx好友。得到它了 :) – cdev 2012-07-12 18:47:05

5

它无关,与静态声明VS实例声明。它是本地声明,它没有默认值,并且在未初始化时会导致错误。

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

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

0

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

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

} 

在你的上面的例子中,X是类范围中声明......所以这是已初始化为它的默认值0,所以它不会给任何错误..