关于将变量声明为静态与非静态的最佳实践

时间:2019-06-12 06:59:18

标签: java static

我有一个Java类,其中有局部变量,

private final String name;

使用static有优势吗?

static final name;

两者都可行,但是我在想的是,当在类之间共享只读对象时,创建静态对象是有意义的。有想法吗?

1 个答案:

答案 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();
}

这将具有12的输出。计数器增加两次,并且由于变量不是使用实例之一,而是使用类本身,因此访问每个实例时,其内容都会更新。