2010-09-12 57 views
1

您好我在java中有初始化問題,下面的代碼給我編譯錯誤稱爲:expected instanceInt = 100;但我已經宣佈了它。如果這些東西堆和棧的東西涉及請深入淺出的講解,我新手Java和我對這些區域沒有先進的知識Java實例變量在兩個語句中聲明和初始化


public class Init { 

int instanceInt; 
instanceInt = 100; 

    public static void main(String[] args) { 

    int localInt; 
    u = 9000; 
    } 

} 
+0

謝謝大家,非常感謝您的幫助 – ddfnfal 2010-09-15 17:28:33

回答

8

您不能在班級中使用語句。它必須與您的聲明在同一行或同一行。


通常的方法可以做到你想要的是那些:

  • 聲明中初始化

    public class MyClass{ 
        private int i = 0; 
    } 
    

    通常這是一個好主意,如果你想定義您的字段的默認值。

  • 在構造塊

    public class MyClass{ 
        private int i; 
        public MyClass(){ 
         this.i = 0; 
        } 
    } 
    

    此塊初始化可以,如果你想有一些邏輯(如果/循環)所在領域的初始化過程中使用。它的問題是,你的構造函數會互相調用,或者它們都具有基本相同的內容。
    在你的情況下,我認爲這是最好的方法。

  • 的方法塊

    public class MyClass{ 
        private int i; 
        public void setI(int i){ 
         this.i = i; 
        } 
    } 
    

    它的初始化不是一個真正的初始化,但是隻要你願意,你可以設置你的價值。

  • 在實例初始化塊

    public class MyClass{ 
        private int i; 
        { 
         i = 0; 
        } 
    } 
    

    當構造是不夠的(見構造塊註釋),但通常開發商傾向於避免這種形式使用這種方式初始化。


資源:

關於同一主題:


獎勵:

這說明什麼碼?

public class MyClass { 
    public MyClass() { 
     System.out.println("1 - Constructor with no parameters"); 
    } 

    { 
     System.out.println("2 - Initializer block"); 
    } 

    public MyClass(int i) { 
     this(); 
     System.out.println("3 - Constructor with parameters"); 
    } 

    static { 
     System.out.println("4 - Static initalizer block"); 
    } 

    public static void main(String... args) { 
     System.out.println("5 - Main method"); 
     new MyClass(0); 
    } 
} 

The answer

+0

您的回答鏈接已經過期。你能否請在實際的文章中包含這些信息? – apraetor 2016-09-14 18:19:05

1

你不能有一個單獨的語句來賦值給宣佈區的集體成員。你必須從一個函數做到這一點,通常是一個類方法。

對於您的情況,請儘快在您聲明的情況下完成任務。

3

把它放在一個初始化塊中。

public class Init { 

    int instanceInt; 
    { 
    instanceInt = 100; 
    } 

    public static void main(String[] args) { 
    int localInt; 
    int u = 9000; 
    } 
} 

或者乾脆初始化而它聲明:

public class Init { 

    int instanceInt = 100; 

    public static void main(String[] args) { 
    int localInt; 
    int u = 9000; 
    } 
} 

參考文獻:

1

你需要做的:

int instanceInt = 100; 

如果是static,你可以在一個static塊初始化。

0

按照Java Language Specification

類體可以包含聲明的類的成員的 ,即, 字段(§8.3),類( §8.5), 接口(§8.5)和方法(§8.4)。 類的主體還可能包含類的構造函數(§8.8)的初始值設定項(§8.6),靜態 初始值設定項(§8.7)和聲明 的實例 。

然而,該聲明

instanceInt = 100; 

是沒有這些東西,因此不允許作爲一類身體的一部分。什麼,你需要做的是這樣的:

int instanceInt = 100; 

這是允許的,因爲它是一個字段聲明包括變量初始化

相關問題