2015-04-12 34 views
3

我有一個下面的代碼。變量cd是類變量,最初它們指向值0,但是當我做了c=a* a;d =b* b*b時,它們將值打印爲25和64,這是正確的。所以我現在想的是,cd現在指向價值25和64,他們是類變量,所以如果我做j=c+d;它應該給我89 j價值,但它給我0 ...爲什麼?我知道如果我使用staticcd變量它會給我89值...但爲什麼我應該使用static作爲cd是全局變量,現在更新值爲25和64.請讓我知道。謝謝。瞭解如何在Java中設定變量值

public class BaiscSum { 

    int a=5; 
    int b=4; 
    int c; 
    int d; 
    int j; 

    public void square() { 
     c=a*a; 
     System.out.println(c); 
    } 

    public void cube() { 
     d=b*b*b; 
     System.out.println(d); 
    } 

    public void sum() { 
     j=c+d; 
     System.out.println(j); 
    } 

    public static void main(String[] args) { 
     BaiscSum squ= new BaiscSum(); 
     squ.square(); 

     BaiscSum cub = new BaiscSum(); 
     cub.cube(); 

     BaiscSum su = new BaiscSum(); 
     su.sum();  
    } 
} 
+1

變量'c'和'd'不是類變量。類變量具有關鍵字「static」 – OPK

+0

這些不是類變量。他們是實例變量。你爲什麼認爲他們是類變量? – user2357112

+0

user2357112 - 感謝您的清理。因爲這些變量在類中使用,它們是全局變量,我認爲它們是類變量,所以類變量和實例變量之間的區別是什麼? –

回答

3

如果我J = C + d;它應該給我爲J值,但它給我 。爲什麼?

因爲你引用sum()su對象,但你有沒有呼籲sucube()square(),而不是與你分別​​和squ的說法。

更改爲

BaiscSum su = new BaiscSum(); 
su.square(); 
su.cube(); 
su.sum(); 

它會給你的預期輸出。

由於所有的變量,你正在使用的instace所以每一個對象都將有自己的在各自的存儲空間設置爲可變的,如果你改變任何一個對象變量也不會影響其他對象的值。

這可能清除更

enter image description here

作爲說明中的每個對象被分配一個單獨的存儲器,因此對其他對象的變量,除非它們是靜態的改變一個對象的變量不影響變化。因此,在第三個對象cd未初始化su對象,JVM使用默認值,如果INT即0給你零總和。

+0

謝謝singhakash –

+0

@DeepaSingh我很高興,如果您發現我的或Moishe Lipsker回答有幫助,請考慮接受任何一個 – silentprogrammer

+0

我該如何接受它? –

6

您正在使用三個獨立的班級實例。這意味着squ,​​和su每個都有其自己的版本。相反,使用同一個實例,以便所有更改都會發生在同一個實例上。

public static void main(String[] args) { 
    BaiscSum sum= new BaiscSum(); 
    sum.square(); 
    sum.cube(); 
    sum.sum(); 
} 
+0

謝謝Moishe Lipsker –