首页 > 解决方案 > 关于将变量声明为静态与非静态的最佳实践

问题描述

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

private final String name;

使用有优势static吗?

static final name;

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

标签: javastatic

解决方案


正如评论所建议的那样,您可能希望查看教程以掌握静态变量与非静态变量的根本区别。

浓缩效果是...

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。两次计数器都增加了,并且由于变量不是与其中一个实例有关,而是与类本身有关,因此在访问每个实例时都会更新其内容。


推荐阅读