【问题标题】:best practice about declaring a variable as static vs non static关于将变量声明为静态与非静态的最佳实践
【发布时间】:2019-06-12 06:59:18
【问题描述】:

我有一个有局部变量的 Java 类,

private final String name;

使用static 有什么好处吗?

static final name;

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

【问题讨论】:

  • 你有互联网连接吗? Google 搜索的第一个链接是来自 Oracle 的编码约定。 oracle.com/technetwork/java/codeconvtoc-136057.html
  • 你应该看看Java Tutorial
  • 这不是“优势”和“最佳实践”的问题。是否使用static根本不同。您需要了解这两种声明形式的不同之处,并使用适当的 形式来实现您想要实现的目标。 (如果您问的是最佳实践,那么您就没有抓住重点。这里最重要的“最佳实践”是了解您在做什么,而不是要求“最佳实践”。)
  • (不过,我想说static 应该谨慎使用,因为它有很多问题最好避免。)

标签: java static


【解决方案1】:

正如 cmets 所建议的,您可能需要查看 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 的输出。两次计数器都增加了,由于变量不是与其中一个实例有关,而是与类本身有关,因此在访问每个实例时都会更新其内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多