在java中设置静态变量

时间:2013-08-22 21:35:32

标签: java

我是java新手,因此可能是一个非常棒的问题:

我有一个班级

public class Foo{
  private static String foo;
  private String bar;

  public Foo(String bar){
      this.bar = bar;
  }

}

现在在我为类Foo实例化任何对象之前,我想设置那个静态变量foo。 将在课堂上使用.. 我该怎么做?

另外,请纠正我的理解。 foo的值在所有对象中都是相同的,因此将它声明为静态是否有意义?正确?

3 个答案:

答案 0 :(得分:8)

public class Foo{
  private static String foo = "initial value";
  private String bar;

  public Foo(String bar){
      this.bar = bar;
  }

}

由于所有对象的值都相同,因此static是正确的选择。如果该值不仅是static而且永远不会改变,那么您应该这样做:

public class Foo{
  private static final String FOO = "initial value";
  private String bar;

  public Foo(String bar){
      this.bar = bar;
  }

}

注意资本化是如何改变的?这是java惯例。 “常数”是NAMED_LIKE_THIS。

答案 1 :(得分:5)

  1. foo将在Foo
  2. 的所有实例之间共享
  3. 初始化:
  4. 选项A

    private static String foo = "static variable";

    选项B

    private static String foo;
    
    static {
        foo = "static variable";
    }
    

    选项B很少使用,主要是在静态变量或潜在异常之间存在某些相互依赖关系时。

    在任何一种情况下,都会在加载类时发生静态init。

答案 2 :(得分:2)

正如其他答案所述,您应该像这样设置初始值:

private static String foo = "initial value";

此外,如果您想从任何地方访问此变量,您需要在静态上下文中引用它,如下所示:

Foo.foo

其中Foo是类名,foo是变量名。

这对理解静态变量的概念非常有用。您不是将foo引用为Foo类的某些实例的成员,而是引用foo作为类本身的成员。因此,对于Foo的所有实例,foo的值将相同,因为它归所有,而不是实例

Foo课程中,只需拨打foo即可,无需使用课程名称对其进行限定。