我有一个Java类,其中有局部变量,
private final String name;
使用static
有优势吗?
static final name;
两者都可行,但是我在想的是,当在类之间共享只读对象时,创建静态对象是有意义的。有想法吗?
答案 0 :(得分:1)
正如评论所建议的,您可能希望查看tutorial来了解静态变量与非静态变量的根本区别。
浓缩效果是...
1: ... ...无需创建该类的实例即可访问静态变量,而非静态变量则不能。这是因为非静态变量需要设置该类的实例,因为它们之间的实例可能不同,而静态变量(例如File.separatorChar
则是特定于类的)。
2 :...无法从静态方法中访问非静态变量。这意味着这可行:
static int countInstances = 0;
int myID;
public TestClass() {
countInstances++;
myID = countInstances;
}
public static void main(String[] args) {
System.out.println(countInstances);
}
虽然无法编译:
public static void main(String[] args) {
System.out.println(myID); // Won't compile
}
这是因为静态方法只能访问静态变量,因此它没有绑定到一个特定实例。因此,它不能引用仅在实例中设置的变量(它们都是非静态变量)。
3: ... ...对于多个实例,静态变量的内容将相同。 示例:
static int countInstances = 0;
public TestClass() {
countInstances++;
System.out.println(countInstances);
}
public static void main(String[] args) {
new TestClass();
new TestClass();
}
这将具有1
和2
的输出。计数器增加两次,并且由于变量不是使用实例之一,而是使用类本身,因此访问每个实例时,其内容都会更新。