我是java新手,因此可能是一个非常棒的问题:
我有一个班级
public class Foo{
private static String foo;
private String bar;
public Foo(String bar){
this.bar = bar;
}
}
现在在我为类Foo实例化任何对象之前,我想设置那个静态变量foo。 将在课堂上使用.. 我该怎么做?
另外,请纠正我的理解。 foo的值在所有对象中都是相同的,因此将它声明为静态是否有意义?正确?
答案 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)
foo
将在Foo
选项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
即可,无需使用课程名称对其进行限定。