2012-07-12 144 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,所以它不會給任何錯誤..