1、靜態屬性
- 當一個屬性被static修飾的時候,就叫做類屬性,又叫做靜態屬性
- 當一個屬性被聲明成類屬性,那麼所有的對象,都共享一個值
- 與對象屬性對比:
- 不同對象的 對象屬性 的值都可能不一樣
比如蓋倫的hp 和 提莫的hp 是不一樣的
但是所有對象的類屬性的值,都是一樣的
2、類屬性
類屬性: 又叫做靜態屬性
對象屬性: 又叫實例屬性,非靜態屬性
如果一個屬性聲明成類屬性,那麼所有的對象,都共享這麼一個值
給英雄設置一個類屬性叫做“版權" (copyright), 無論有多少個具體的英雄,所有的英雄的版權都屬於 Riot Games公司。
package charactor;
public class Hero {
public String name; //實例屬性,對象屬性,非靜態屬性
protected float hp;
static String copyright;//類屬性,靜態屬性
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "蓋倫";
Hero.copyright = "版權由Riot Games公司所有";
System.out.println(garen.name);
System.out.println(garen.copyright);
Hero teemo = new Hero();
teemo.name = "提莫";
System.out.println(teemo.name);
System.out.println(teemo.copyright);
}
}
3、訪問類屬性
訪問類屬性有兩種方式
- 對象.類屬性
teemo.copyright
- 類.類屬性
Hero.copyright
這兩種方式都可以訪問類屬性,訪問即修改和獲取,但是建議使用第二種 類.類屬性 的方式進行,這樣更符合語義上的理解
4、什麼時候使用對象屬性?什麼時候使用類屬性?
-
如果一個屬性,每個英雄都不一樣,比如name,這樣的屬性就應該設計爲對象屬性,因爲它是跟着對象走的,每個對象的name都是不同的
-
如果一個屬性,所有的英雄都共享,都是一樣的,那麼就應該設計爲類屬性。比如血量上限,所有的英雄的血量上限都是 9999,不會因爲英雄不同,而取不同的值。 這樣的屬性,就適合設計爲類屬性
5、練習-類屬性
通過garen.copyright修改其值
garen.copyright = "Blizzard Entertainment Enterprise";
然後打印teemo.copyright,觀察是否有變化
public class Hero {
public String name;// 實例屬性、對象屬性、非靜態屬性
protected float hp;
static String copyright;// 靜態屬性、類屬性
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "蓋倫";
garen.copyright = "Blizzard Entertainment Enterprise";
System.out.println(garen.name);
System.out.println(garen.copyright);
Hero teemo = new Hero();
teemo.name = "提莫";
System.out.println(teemo.name);
System.out.println(teemo.copyright);
}
}
// 結果:有變化
// 輸出結果,截圖