![](/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.