2014-02-28 45 views
0

有以下兩類:如何更改在其他類中的變量,這將改變其值在所有類的Java

class1的

int a = 10; 

public void Main(String[] args){ 
    System.out.println(a); // will print "10" 
    class2 c2 = new class2(); 
    class2.ChangeValue(a); 
    System.out.println(a); // will print "10" even after the value has 
          // been set to 20 in the other class 
} 

類class2

public void ChangeValue(int a){ 
    a = 20; 
    System.out.println(a) // will print "20" 
} 

問題是,我如何讓這個值在所有類中都是20,而不僅僅是那個類ged it。

+2

您正在打印1級並更改2級。兩個字段儘管名稱相同,但區域完全不同。你可以把它變成靜態的。 – ola

回答

0

使該值爲靜態或僅使用單例模式。

+2

我想你的downvote是建議使用單例模型。這不是輕描淡寫的建議。然而,你對「靜態」的建議是正確的。 – indivisible

+0

是的,可能是這樣,我不知道爲什麼有人下了它,那就是生活。我不認爲我的答案是合格的。 – RMachnik

+0

從設計的角度來看,使用一個在多個類之間共享的'public static'(或者package-visible'static')字段比擁有一個singleton更有用。 – ajb

0

在執行class2時,您必須聲明class2.ChangeValue(a);更改的變量爲static

靜態類變量每個類都存在一次。所有其他類變量都將存在於類的每個實例中。

如果你想要類之間的協調,你將不得不自己在main中這樣做。

0

您可以在第二課中創建靜態並以此方式訪問它。

二級:

static int a = 10; 

public void ChangeValue(){ 
    a = 20; 
    System.out.println(a); //will print "20" 
} 

第1類:

public static void main(String[] args){ 
    System.out.println(Class2.a); //will print "10" 
    Class2 c2 = new Class2(); 
    c2.ChangeValue(Class2.a); 
    System.out.println(Class2.a); //will print "10" even after the value has been set to 20 in 
          // the other class 
} 

或周圍的其他方法

第1類:

static int a = 10; 
public static void main(String[] args){ 
    System.out.println(a); //will print "10" 
    Class2 c2 = new Class2(); 
    c2.ChangeValue(a); 
    System.out.println(a); //will print "10" even after the value has been set to 20 in 
          // the other class 
} 

二級:

public void ChangeValue(){ 
    Class1.a = 20; 
    System.out.println(Class1.a); //will print "20" 
} 

建議使用對象而不是原始類型也可以。通過這種方式,您可以將該對象作爲參數傳遞,並且該值將繼續。

0

您正在使用原始數據類型int傳遞給另一個方法並更改其值。基元總是按值傳遞。所以你會永遠失去其他方法改變的價值。有兩種方法來緩解:將通過引用傳遞

  • 製作INT一個靜態

    1. 使用對象,比如{class1.a = 20}

    希望其他方法改變其值這有助於。

  • 0

    對不起,但這是不可能的,因爲它們在不同的範圍內,所以放入第2類的「a」是一個形式參數並且是臨時的,當ChangeValue完成時,「a」消失,他們完全處於一個不同的世界。 PS:你應該在類上使用大寫,比如Class1,Class2和方法changeValue上的小寫字母。