通过非静态方法更改公共静态变量

时间:2016-10-12 09:00:52

标签: java static-variables

我在不同的背景下实现相同的功能。我想通过调用非静态方法来改变静态变量的值,如下所示,

ScrollViewer.VerticalScrollMode="Enabled"

我收到的错误就像“将方法更改为静态”..所以任何建议...... ??

3 个答案:

答案 0 :(得分:2)

这根本无法奏效。

您只能在某些实例上调用静态方法。在您的示例中,没有实例;因此,编译器只允许您调用静态方法。

仅供记录:命名令人困惑。您调用了方法 changeTheStatic()。但是这种方法并没有改变任何。它只返回一个值。所以你应该称之为 getInitialValue()

答案 1 :(得分: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()更改为静态也可以。

答案 2 :(得分:0)

您不能简单地调用这样的方法,因为在初始化类时会创建静态变量。这意味着即使没有类的实例,这些静态变量也会存在。

因此,您只能通过将changetheStatic()方法更改为静态

来执行此操作
public static staticVar = changetheStatic();
public static String changetheStatic(){
    return "valueChanged";`
}