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

Java 将变量声明为静态变量与非静态变量的最佳实践,java,static,Java,Static,我有一个Java类,其中有局部变量 私有最终字符串名; 使用静态是否有优势 静态最终名称; 这两种方法都有效,但我想的是,当类之间共享只读对象时,创建静态对象是有意义的。想法?正如评论所建议的那样,您可能想看看a,以掌握静态变量与非静态变量的根本区别 凝聚效应是 1:。。。无需创建该类的实例即可访问静态变量,非静态变量则无法访问。这是因为非静态变量需要设置该类的实例,因为它们可能因实例而异,而静态变量(如File.separatorChar)是特定于类的 2:。。。不能从静态方法中访问非静态

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

私有最终字符串名;
使用
静态
是否有优势

静态最终名称;

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

正如评论所建议的那样,您可能想看看a,以掌握静态变量与非静态变量的根本区别

凝聚效应是

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:。。。对于多个实例,静态变量的内容将是相同的。 例如:


这将有
1
2
的输出。这两次计数器都会增加,而且由于变量不是与其中一个实例有关,而是与类本身有关,因此在访问每个实例时,都会更新其内容。

您是否有internet连接?谷歌搜索的第一个链接是来自Oracle的编码约定。你应该看一看,这不是“优势”和“最佳实践”的问题。是否使用
静态
是根本不同的。您需要了解这两种声明形式的不同之处,并根据您想要实现的目标使用适当的形式。(如果你问的是最佳实践,那么你就没有抓住重点。这里最重要的“最佳实践”是理解你在做什么,而不是要求“最佳实践”。(但是,我要说的是,应该谨慎使用
静态
,因为它有许多问题是最好避免的。)
static int countInstances = 0;
public TestClass() {
    countInstances++;
    System.out.println(countInstances);
}

public static void main(String[] args) {
    new TestClass();
    new TestClass();
}