2016-10-12 155 views
1

我在不同的上下文中實現相同。我想通過調用下面的非靜態方法來改變靜態變量的值,通過非靜態方法更改公共靜態變量

public static staticVar = changetheStatic(); 
public String changetheStatic(){ 
return "valueChanged";` 
} 

我收到錯誤,如「更換方法爲靜態的」 ..所以任何建議??

+0

把'static'訪問修飾符 –

+0

'公共靜態staticVar中= changetheStatic()之後;'==>您的代碼獲得了」 t編譯 – TheLostMind

回答

2

這根本行不通。

您只能調用靜態方法在某些實例上。在你的例子中,沒有實例;因此編譯器只會允許你調用一個靜態的方法。

只是爲了記錄:命名很混亂。你叫你的方法changeTheStatic()。但是,該方法不會改變什麼。它只返回一個值。所以你應該把它叫做getInitialValue()

1

你不能這樣做。您正嘗試調用實例方法而不初始化對象。相反,你所能做的就是做在你構造器

  public class A { 
      public static staticVar ; 

      public A() { 
        A.staticVar = this.changetheStatic() 
      } 
      public String changetheStatic(){ 
      return "valueChanged";` 
      } 
     } 

如果你不想改變它在構造函數中,你可以簡單地初始化一個對象,並調用實例方法

   System.out.println(A.staticVar);//old value 
       new A().changetheStatic();//will call instant method related to the new instantiated object , note i did not give it a reference so GC will free it cuz i only need it to change the static variable 

       System.out.println(A.staticVar);//new value 

的這裏整體思路是,即時方法需要從對象

  public static staticVar = changetheStatic(); 

因此更改changetheStatic()來叫你正在做的是試圖調用即時方法靜態什麼靜態也會起作用。

+0

是的,但如果我想訪問另一個類聲明爲本地的靜態變量。 – djavvadi

+0

你可以從任何地方訪問它,只要它的公共,想法是如果你想從即時方法訪問它,你需要實例化一個對象,並從那裏調用該方法,否則你將需要從靜態方法改變它 –

0

您不能簡單地調用這樣的方法,因爲靜態變量是在初始化類時創建的。這意味着即使沒有類的實例,這些靜態變量也會存在。

因此,你只能通過改變changetheStatic()方法做到這一點,以靜態

public static staticVar = changetheStatic(); 
public static String changetheStatic(){ 
    return "valueChanged";` 
}