2012-10-16 120 views
1

這是我寫的一段代碼。Java變量初始化

public class cube { 
    private int length; 
    private int breadth; 
    private int height; 
    private int volume; 
    private int density; 
    private int weight; 
    public cube(int l,int b,int h, int d) { 
     length=l; 
     breadth=b; 
     height=h; 
     density=d; 
    } 

    public void volmeShow(){ 
     volume = length * breadth * height; 
     System.out.println("The Volume of the cube is "+this.volume); 
    } 
} 

所以,如果我實現上面的立方體類這樣的,

public class cubeApp { 
    public static void main(String[] args){ 
     cube mycube = new cube(5,6,9,2); 
     mycube.volumeShow(); 
    } 
} 

我得到告訴我,體積的輸出爲270

但我得到的輸出音量說:另一方面,如果我定義像這樣的體積變量:

public class cube { 
    private int length; 
    private int breadth; 
    private int height; 
    private int volume=length*breadth*height; 
    private int density; 
    private int weight; 
    public cube(int l,int b,int h, int d) { 
     length=l; 
     breadth=b; 
     height=h; 
     density=d; 
    } 

    public void volmeShow(){ 
     System.out.println("The Volume of the cube is " + this.volume); 
    } 
} 

爲什麼會發生這種情況?

回答

4

因爲length,breadthheight在執行該語句時尚未分配任何值。你最好在構造函數中執行該計算。

+0

感謝您的答案,但我只是想知道爲什麼這些變量的值改變時,我用構造函數實現類?我的意思是一旦我實現構造函數創建一個新的「立方體」類與我已經提供的值,爲什麼不是這個新的類創建與我提供的值的默認變量值,爲什麼值仍然從類的初始化? –

+0

您正在正確初始化變量,卷除外。所以「長度」,「寬度」,「高度」和「密度」都將被正確計算。但'volume'不會是因爲計算'volume = length * widthth * height;'在這些變量被初始化之前執行,因此'volume'爲什麼是零。 – jonny2k9

+0

明白了!謝謝! –

0

你不能像這樣定義var。

當您在方法外定義它時 - 將在創建類時計算。

2

由於private int volume=length*breadth*height;當類初始化被執行,所有涉及的領域都是0

您可以修改你的構造函數:

public cube(int l,int b,int h, int d) { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height; 
} 

這樣的體積將正確計算。 請注意,您應該使用Cube作爲類名,請參閱Code Conventions for the Java

3

唯一的問題是您的volume變量僅在構建對象之前定義。其餘屬性默認設置爲0,因此爲什麼產生量爲0 可以修改你的構造函數:

public cube(int l,int b,int h, int d) { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height; 
} 

這樣的體積將正確計算。 側面說明,你應該使用立方作爲類名,看Code Conventions for the Java

+0

+1對不起,我錯誤地編輯了你的信息,並被批准了。 – dan

+0

@dan不要打擾,那是我自己。說出實際的解決方案始終是一個好主意。 ;) –

1

你需要計算和分配體積值在其他變量設置後 -

public cube(int l,int b,int h, int d) { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height; 
} 

但是,體積看起來是多餘的你的班。你可以刪除它,你的方法可以隨時計算出它的飛行 -

public void volmeShow(){  
    int volume=length*breadth*height; //local, not needed at class level 
    System.out.println("The Volume of the cube is " + volume); 
0

屬性由構造函數聲明順序排列構造體超打電話之前,但初始化後,()。

在初始化音量時,在你的情況下,所有的成員都設置爲零,這是int的默認值。

你必須寫:

public cube(int l,int b,int h, int d) { 
    length = l; 
    breadth = b; 
    height = h; 
    density = d; 
    volume = length*breadth*height; 
} 
2

當一個類被初始化時,所有的成員字段初始化爲默認值(int(和數字一般)是0)。

基本上

private int length; 
private int breadth; 
private int height; 
private int density; 
private int weight; 
private int volume=length*breadth*height; 

則計算結果爲

private int length = 0; 
private int breadth = 0; 
private int height = 0; 
private int density = 0; 
private int weight = 0; 
private int volume=length*breadth*height; 

計算結果爲

private int volume=0*0*0; 

你就不再更新的音量值。

你居然會更好做......

public cube(int l,int b,int h, int d) { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height; 
} 

...其實,你可以(從你的例子),因爲他們不要弄死的lengthbreadthheightdensity值共不要添加任何東西給你...