2011-02-01 62 views
1
class B { 
    int x,y; 
    int z; 
    z=x*y; 

    void show() { 
    System.out.println(z); 
    } 
} 

class A { 
    public static void main(String as[]) { 
    B b=new B(); 
    b.show(); 
    } 
} 
+0

你能正確格式化你的代碼並打印完整的錯誤信息(包括行號)嗎? – PaulJWilliams 2011-02-01 10:01:57

+3

你有問題嗎? – Jon 2011-02-01 10:02:35

+0

如果你以某種方式使它正確(構造函數或初始化塊),你應該仔細考慮它背後的邏輯,因爲你有x和y未初始化。 – 2011-02-01 10:07:23

回答

14

你不能在類體中有語句(z=x*y;)。你有(至少)兩個選項:

  • int z = x * y;
  • 使用初始化塊

    { 
        z = x * y; 
    } 
    

這幾乎是相同的。我更喜歡第一個選項(清潔)See here

3

z=x*y;你不能在這裏做。把它裏面的構造

class B { 
    int x,y; 
    int z; 
    //z=x*y; //you cant do it here. where are you getting x and y value by the way??? 

    public B() 
    { 
    //x and y values should be set 'somehow' before this 
    z = x*y; 
    } 

    void show() { 
    System.out.println(z); 
    } 
} 
0

我覺得你的問題是在這些線路:

int z; 
z=x*y; 

這第一行是完全沒有問題 - 它宣稱所謂int類型的z一個類的實例變量。然而,第二行是你問題的根源。在Java中,將代碼放在類方法或靜態初始化程序之外的類中是非法的。在這種情況下,語句z = x * y;是合法的Java代碼,但它必須在方法內部。

要解決此問題,您可以將此代碼移到構造函數或其他方法中。

0
z=x*y; 

不在方法體內提及。你不能那樣做。將其移至構造函數或其他方法。

在類內部體和外部方法體內,您只能提及字段,方法和內部類聲明。