2017-02-09 167 views
-2

下面的代碼有什麼問題?初始化後可以初始化靜態變量嗎?

class test { 
    static int a; 
    a=10; 
} 

如果我像這樣寫(如上),我得到一個編譯時錯誤。

class test { 
    static int a=10; 
    a=4; 
} 

對於第二個,我沒有得到任何錯誤。

+2

您不能在變量的聲明中包含單獨變量的變量,超出任何方法或塊。 – SomeJavaGuy

+4

你的兩個例子都不能編譯 – Idos

+2

「對於第二個,我沒有收到任何錯誤。」你應該得到一個錯誤。 –

回答

7

你的兩個例子都不應該編譯。

a=10; 

是一個聲明,它不是直接在class declaration內有效。只能把直接類內部以下:

  • 成員聲明(構件/靜態變量聲明(如static int a;),方法,嵌套類和接口);
  • 靜態和實例初始值設定項;
  • 構造函數。

你需要把一個語句塊中,例如靜態初始化:

static int a; 

static { 
    a = 10; 
} 

這相當於:

static int a = 10; 
3

您需要使用聲明的靜態塊在另一條線上進行分配(方法外)

class test { 
    static int a; 
    static { a=10; } 
} 
1

a = 4;必須在有效的範圍

任何方法或構造函數來完成...

這條線是有效的,而不是

static int a=10; 

因爲Java允許youto聲明,並在一個語句中初始化!

0

如果要在將其定義爲空整型之後初始化a,則只能在函數中執行該操作,因爲它是靜態的。

+3

'int'不能爲空。如果您未分配它,它的值將爲零。你不需要在一個函數中完成它,你也可以在初始化塊中完成它。 –

+0

要添加到Andy的註釋中,事實上Java中沒有任何基本類型都是可以爲空的,它們將使用默認值進行初始化。 – px06

0

必須在靜態塊或init塊或構造函數中初始化。
你只能初始化函數或塊內聲明後,您的成員變量,因爲它是靜態的,你應該使用靜態塊

0

什麼目前你正在做的是在聲明一個類decleration,這是無效的變量。看看這個例子都不會給你任何好的結果。

類聲明中,你可以不過初始化變量:如果你想用它來工作

static int a; 

然後,你必須首先創建一個方法(如果你沒有意識到這一點,我會強烈建議觀看一些YouTube的教程或閱讀關於這個主題的書):

public void foo(int a){ 
a = 6; //Here you can play with your variables and change them 
} 

在類declararions您可以:聲明方法,初始化和建設者。 (你可以做更多的事情,但是在潛入太深之前我會看看這些點)。

而且似乎你不知道什麼是靜態變量或靜態方法呢,我認爲下面的帖子會幫你:

difference between 'static int' and 'int' in java

What are static method and variables?

我希望我可以幫助和玩樂學習Java

+0

用於在類加載時聲明的靜態變量內存,通過class.static變量或靜態變量來調用我們調用的變量。對於創建的@ object創建的實例變量內存,這意味着在創建對象時,我們通過聲明的變量進行調用。 – Attri

0

因爲在分類加載時分配靜態內存 所以我們需要這樣做 class test {static int a = 10; public static void main(String args []){a = 12 output(test.a(or)a);}}