静态变量和实例变量有什么区别。下面这句话是我无法得到的:
在某些情况下,一个类的所有对象应该只共享一个特定变量的副本——这里使用静态变量。
静态变量表示类范围的信息。类的所有对象共享相同的数据。
我认为实例变量是在类范围内使用的,而静态变量只在它们自己的方法中有作用域?
原文由 user2971033 发布,翻译遵循 CC BY-SA 4.0 许可协议
静态变量和实例变量有什么区别。下面这句话是我无法得到的:
在某些情况下,一个类的所有对象应该只共享一个特定变量的副本——这里使用静态变量。
静态变量表示类范围的信息。类的所有对象共享相同的数据。
我认为实例变量是在类范围内使用的,而静态变量只在它们自己的方法中有作用域?
原文由 user2971033 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设有一个测试类:
class Test{
public static int a = 5;
public int b = 10;
}
// here t1 and t2 will have a separate copy of b
// while they will have same copy of a.
Test t1 = new test();
Test t2 = new test();
您可以像这样使用它的类名访问静态变量
Test.a = 1//some value But you can not access instance variable like this
System.out.println(t1.a);
System.out.println(t2.a);
在这两种情况下,输出都将为 1,因为 a 由测试类的所有实例共享。而实例变量将每个都有 b (实例变量)的单独副本所以
t1.b = 15 // will not be reflected in t2.
System.out.println(t1.b); // this will print 15
System.out.println(t2.b); / this will still print 10;
希望能解释您的查询。
原文由 user2754122 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
在类属性的上下文中,
static
具有不同的含义。如果您有这样的字段:然后,该类的 每个实例 都将共享 相同的 变量,因此如果您在一个实例中更改它,则更改将反映在更改之前或之后创建的所有实例中。
如此说来,您可能明白这在很多情况下都是不好的,因为它很容易变成不希望的副作用:更改对象
a
也会影响b
你可能最终想知道为什么b
没有明显的原因改变。无论如何,在某些情况下这种行为是绝对可取的:const
,所以让所有类访问相同的值不会有任何坏处,因为没有人可以更改它。如果您有 很多 该类的实例,它们也可以节省内存。不过,不确定 并发 访问。static
vars 在你的程序启动之前被实例化,所以如果你有太多,你 可能会 减慢启动速度。A
static
方法只能访问static
属性,但在尝试之前请三思。经验法则:不要使用
static
,除非有必要并且你知道自己在做什么或者你正在声明一个类常量。