我在不同的上下文中实现相同。我想通过调用下面的非静态方法来改变静态变量的值,通过非静态方法更改公共静态变量
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