2016-10-12 26 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";` 
}