我在不同的上下文中實現相同。我想通過調用下面的非靜態方法來改變靜態變量的值,通過非靜態方法更改公共靜態變量
public static staticVar = changetheStatic();
public String changetheStatic(){
return "valueChanged";`
}
我收到錯誤,如「更換方法爲靜態的」 ..所以任何建議??
我在不同的上下文中實現相同。我想通過調用下面的非靜態方法來改變靜態變量的值,通過非靜態方法更改公共靜態變量
public static staticVar = changetheStatic();
public String changetheStatic(){
return "valueChanged";`
}
我收到錯誤,如「更換方法爲靜態的」 ..所以任何建議??
這根本行不通。
您只能調用非靜態方法在某些實例上。在你的例子中,沒有實例;因此編譯器只會允許你調用一個靜態的方法。
只是爲了記錄:命名很混亂。你叫你的方法changeTheStatic()。但是,該方法不會改變什麼。它只返回一個值。所以你應該把它叫做getInitialValue()。
你不能這樣做。您正嘗試調用實例方法而不初始化對象。相反,你所能做的就是做在你構造器
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()
來叫你正在做的是試圖調用即時方法靜態什麼靜態也會起作用。
是的,但如果我想訪問另一個類聲明爲本地的靜態變量。 – djavvadi
你可以從任何地方訪問它,只要它的公共,想法是如果你想從即時方法訪問它,你需要實例化一個對象,並從那裏調用該方法,否則你將需要從靜態方法改變它 –
您不能簡單地調用這樣的方法,因爲靜態變量是在初始化類時創建的。這意味着即使沒有類的實例,這些靜態變量也會存在。
因此,你只能通過改變changetheStatic()
方法做到這一點,以靜態
public static staticVar = changetheStatic();
public static String changetheStatic(){
return "valueChanged";`
}
把'static'訪問修飾符 –
'公共靜態staticVar中= changetheStatic()之後;'==>您的代碼獲得了」 t編譯 – TheLostMind