![](/img/trans.png)
[英]Is an ArrayList automatically declared static in Java, if it is an instance variable?
[英]Can instance variable be declared as static variable in java
我写了以下代码:
public class Count
{
private static int[] array;
public Count( int[] array )
{
this.array = array;
}
public int count()
{
int count = 0;
for (int i = 0; i < array.length; i++) {
int x = array[i];
if (x < 0) {
if (x == -1 && i > 0 && array[i - 1] == -1) {
break;
}
} else {
count++;
}
}
return count;
}
}
然后在另一堂课中,我写道:
Count c = new Count(new int[]{1,-1,-1});
并检查了c.count()
的结果。 我没有遇到编译器错误,但我却想得到1
。 我不知道为什么,因为如何将静态变量分配给实例变量? 而且,如果我创建另一个Count类的实例怎么办? 它们是否都具有相同的变量?或者只是它们自己的副本? 如果我尝试通过编写Count.array
来访问变量, Count.array
怎么Count.array
? 谢谢。
类可以访问自己的静态成员。
所有类都将看到相同的静态成员(忽略线程争用的复杂性)。
如果创建另一个Count实例,则它们都将修改同一个变量。
那就是static
意思...
array
在Count
所有实例之间共享-它们都可以从中读取和写入。 如您所说,如果您实例对其进行修改,则所有其他实例将看到新修改的值。
我建议您编写您要询问并查看的示例。 没有比JVM更好的权限了,它会比SO更快地告诉您。
我认为您应该了解类和实例变量的含义,并选择与您的意图匹配的变量。
所以这是两个类:
public class Count
{
// Shared by all
private static int[] array;
}
或实例:
public class Count
{
// Owned by instance
private int[] array;
public Count(int [] v) {
if (v == null) throw new IllegalArgumentException("array cannot be null");
this.array = new int(v.length);
System.arraycopy(v, this.array, 0, v.length);
}
}
您不应该只是将数组引用分配给私有数据成员。 您需要分配内存并将值复制到其中。 否则,如果输入数组的提供者使用其引用进行更新,则其将修改私有值。
太多的人没有意识到向私有成员分配可变引用会破坏封装。 也许您现在不会成为其中之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.