static修飾屬性

2021-07-22 05:39:15 字數 1306 閱讀 6545

今天寫程式遇到一點小問題,最後問題出在成員變數修飾符上,static修飾符

public class students 

public int getid()

public void setid(int id)

public string getname()

public void setname(string name)

public float getscore()

public void setscore(float score)

}

public class test 

public static void inquiry(int id) ;

for (int i = 0; i < students.length; i++)

system.out.println("s" + i + students[i] + " " + students[i].getid() + students[i].getname() + students[i].getscore());}}

}

輸出結果為:

s0com.mini.examin4.students@659e0bfd 4ed92.0

s1com.mini.examin4.students@2a139a55 4ed92.0

s2com.mini.examin4.students@15db9742 4ed92.0

s3com.mini.examin4.students@6d06d69c 4ed92.0

s4com.mini.examin4.students@7852e922 4ed92.0

從輸出結果中,可看出測試類中,for迴圈遍歷物件陣列,輸出結果中,堆記憶體中有5個物件位址,但是這5個位址中存放的屬性值一樣,而且都是new的最後乙個物件的屬性。

要想讓程式實現:傳入引數id值,顯示對應的學生的姓名和成績資訊,只需要把students類的static成員變數,改為non-static(把static修飾符去掉即可)。

分析:因為students類中屬性都是static的,這些靜態成員變數存放在方法區中,static 修飾屬性:無論乙個類生成了多少個物件,所有這些物件共同使用唯一乙份靜態的成員變數;乙個物件對該靜態成員變數進行了修改,其他物件的該靜態成員變數的值也會隨之發生變化。物件在堆區,共享類的static變數(在方法區),所以,輸出的位址不一樣(生成了5個物件),而物件指向的屬性值一樣。

static修飾的類屬性

我看書上說 static成員總是唯一存在的,並且在多個物件之間互享。因此想到,如果我在a.php中例項化了person.class.php這個類,並給static name賦值,那麼在b.php中再次例項化這個類,b中能不能讀取name屬性的新值呢?如下 person.class.php class...

static修飾屬性,方法,類

本文 於 一 static修飾屬性 1.屬性隨著類的載入而載入,是類變數,其載入早於物件,不需要new即可載入 2.類變數所在的類的所有物件共用這乙個屬性,存放在靜態域中 二 static修飾方法 1.方法隨著類的載入而載入隨著類的載入而載入,是類方法,其載入早於物件,不需要new 2類方法所在的類...

static修飾屬性 方法 類的區別

一 static修飾屬性 1.屬性隨著類的載入而載入,是類變數,其載入早於物件,不需要new即可載入 2.類變數所在的類的所有物件共用這乙個屬性,存放在靜態域中 二 static修飾方法 1.方法隨著類的載入而載入隨著類的載入而載入,是類方法,其載入早於物件,不需要new 2類方法所在的類的所有物件...