java - 关于将变量声明为静态与非静态的最佳实践
问题描述
我有一个 Java 类,其中有局部变量,
private final String name;
使用有优势static
吗?
static final name;
两者都有效,但我在想的是,当类之间共享只读对象时,创建静态对象是有意义的。想法?
解决方案
正如评论所建议的那样,您可能希望查看教程以掌握静态变量与非静态变量的根本区别。
浓缩效果是...
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
。两次计数器都增加了,并且由于变量不是与其中一个实例有关,而是与类本身有关,因此在访问每个实例时都会更新其内容。
推荐阅读
- css - 如何将单个 CSS 用于多个 Shiny 应用程序
- php - 无法打开流或文件:无法打开流:权限被拒绝
- c# - 如何在 C# 中将列表转换为 JSON?
- azure - 使用 Application Insight 时的操作 ID
- angular - 检查 FormGroup 上的模式验证器
- javascript - 仅在触摸字段时如何显示错误?| 反应 && 形式
- django - Django: ProtectedError exception handling is not working
- phpspreadsheet - How to draw or implement a pie chart using phpspreadsheet?
- r - 使用向量的元素位置作为 ID 号的向量到数据框
- javascript - Magneto Shoplift JavaScript 恶意代码