9

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

我有一堂课

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

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

}

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

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

4

3 回答 3

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。

于 2013-08-22T21:37:01.397 回答
5
  1. foo将在所有实例之间共享Foo
  2. 初始化它:

选项 A

private static String foo = "static variable";

选项 B

private static String foo;

static {
    foo = "static variable";
}

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

无论哪种情况,加载类时都会发生静态初始化。

于 2013-08-22T21:40:24.743 回答
2

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

private static String foo = "initial value";

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

Foo.foo

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

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

Foo类中,您可以foo不使用类名限定它而只调用它。

于 2013-08-22T21:41:16.933 回答