Java是物件導向的語言,在開發的時候要以對象的方式來組織代碼,方法和屬性應該屬於某個對象,而不是獨立存在。
在Java中還存在一類方法和屬性,不屬於某個具體對象,而是多個對象共用的,稱為靜態方法或者靜態屬性。
1、靜態屬性
靜態屬性是某個類的所有對象共用的屬性,通過static關鍵字定義。下面的代碼定義了一個靜態屬性:
public Class Person(
public static int count;
)
要訪問靜態屬性,可以通過對象名,還可以通過類名。下面的代碼都是正確的:
方式一:
Person.count = Person.count+1;
方式二:
Person person = new Person();
person.count++;
這與非靜態成員是不同的,非靜態成員只能通過對象名調用,每個對象都有自己對應的屬性,例如張三有自己的身高,李四有自己的身高。因為靜態成員是對應到類的,而非靜態成員是對應到對象的,每個對象都會有一個。假設,Person類執行個體化了6個對象,對於靜態成員,記憶體中只有一個空間來儲存這個屬性,而非靜態成員會有6個,每個對象一個。所以,靜態成員又稱為類成員,非靜態成員稱為對象成員。
執行個體:寫出下面代碼的輸出結果
Person p1 = new Person();
p1.count=10;
Person p2 = new Person();
p2.count=20;
System.out.println(p1.count);
System.out.println(p2.count);
答案:20 20滑鼠選中查看答案。
2、靜態方法
靜態方法屬於類的方法,不屬於某個具體對象的,所以靜態方法不能訪問非靜態成員。
靜態方法的定義,使用關鍵字static,下面定義了一個靜態方法,對count進行操作:
public static void setCount(int count){
Person.count = count;
}
public static int getCount(){
return count:
}
實際上,大家在課程已開始的時候就已經使用靜態方法了,記不記得main方法的定義?
靜態方法不能訪問非靜態屬性,下面的代碼就是錯誤的:
public int height;
public static int getHeight(){
return height;
}
問題:什麼時候用靜態方法呢?
答案:如果方法執行過程中不使用對象的屬性(也就是非靜態成員變數),只是用靜態成員變數或者通過參數傳入的資訊,這時候方法的處理過程與對象無關,所以可以設定成靜態方法,並且應該設定成靜態方法。
滑鼠選中查看答案。
3、靜態初始化器
構造方法用於對成員變數進行初始化,靜態成員變數不屬於某個對象,如何對靜態成員變數進行初始化呢?使用靜態初始化器。下面就是一段靜態初始化器代碼:
static{
count=0;
}
static引導的一對大括弧,括弧中包含對靜態成員的初始化代碼,這就是靜態初始化器,可以認為是比較特殊的方法,沒有傳回值類型,沒有參數,沒有方法名,因為它是在載入類的時候調用的。
注意:靜態初始化器中只能對靜態成員進行操作,不能對非靜態成員進行操作。
下一次介紹一個簡單的物件導向的例子。
上一次:
第三十一講 常量成員下一次: 第三十三講 父類與繼承李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher邀請您為好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5