2016-08-15 87 views
0

我是java的初學者,我正在使用Netbeans IDE,我在這裏有一些困惑。 我寫下如下代碼:與java對象混淆

public class Try { 

    public static int AA; 
    public static int BB; 

    Try(int a, int b) 
    { 
     AA=a; 
     BB=b; 
    } 

    int calculate() 
    { 
     int c; 
     c=Try.AA + Try.BB; 
     System.out.println(c); 
     return 0; 
    } 

    public static void main(String[] args) { 
     Try a = new Try(1,2); 
     Try b = new Try(2,3); 
     a.calculate(); 
     b.calculate(); 
     // TODO code application logic here 
    } 
} 

好,只是一個簡單的程序加入了兩個整數,這裏是輸出:

5 
5 

我期待它是

3 
5 

那麼,我哪裏錯了?

+3

請勿使實例變量static,即'public int AA;'而不是'public static int AA;'等等(並且看看命名約定以及如何使用訪問修飾符如public '正確 - 這與您的問題沒有直接關係,但您也應該瞭解這一點)。 – Thomas

+0

非常感謝!我糾正了我的代碼,我將看看命名約定。我想我需要買一本適當的書。 – Hei

回答

3

AABBstatic這意味着它們屬於類,不每個實例。實質上,這兩個變量在Try的所有實例中共享。當你實例化第二個對象時,原來的兩個值被覆蓋。

使兩個變量非靜態將導致您期待的計算。

+0

非常感謝!現在事情運作良好! – Hei

1

AA和BB屬性在所有對象之間共享(並且它們被重寫)。

package pkgtry; 

/** 
* 
* @author HeiLee 
* 
*/ 
public class Try { 

/* there is the mistake, 

    public static int AA; 
    public static int BB; 

    This attributes are shared between all objects. 
*/ 
    public int AA; 
    public int BB; 

    Try(int a, int b) 
    { 
     AA=a; 
     BB=b; 
    } 
    int calculate() 
    { 
     int c; 
     c=AA + BB; 
     System.out.println(c); 
     return 0; 
    } 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Try a = new Try(1,2); 
     Try b = new Try(2,3); 
     a.calculate(); 
     b.calculate(); 
    } 

} 
+0

只要您不將'c = Try.AA + Try.BB'行更改爲'c = this.AA + this.BB',就不會工作。另外,對於實例變量,「AA」和「BB」是可怕的名字。 – Clashsoft

+0

@Clashsoft你說得對,對不起。 –

+0

謝謝!而且,這些名字是可怕的。 – Hei