1. 程式人生 > 實用技巧 >類與物件的語法細則之靜態成員

類與物件的語法細則之靜態成員

類的靜態成員

-全域性變數、外部函式 關鍵字static

– 納入到類中管理:靜態成員 例3-12 對鐘錶類Clock進行物件計數的虛擬碼(模擬C/C++語言)
 1 int totalClock = 0; // 模擬C++語言:定義一個全域性變數,記錄所建立的Clock物件個數
 2 void plusObj( ) { totalClock ++; } // 模擬C/C++語言:定義一個外部函式,將計數加1
 3 
 4 public class Clock { // 鐘錶類Clock
 5     private int hour, minute, second; // 欄位成員
 6     public
void set( ) { …… } // 不帶引數的設定時間方法set(程式碼省略) 7 public void set(int h, int m, int s) { …… } // 帶引數的設定時間方法set(程式碼省略) 8 public void show( ) { …… } // 顯示時間方法show(程式碼省略) 9 public Clock( ) // 定義一個構造方法 10 { ……; plusObj( ); } // 希望通過構造方法為鐘錶物件增加計數功能 11 }
– Java語言不允許在類外定義全域性變數或函式 則: 例3-13 通過靜態成員實現對鐘錶類Clock進行物件計數的Java示意程式碼(Clock.java)(定義靜態變數和靜態方法)
 1
public class Clock { // 定義鐘錶類Clock 2 public static int totalClock = 0; // 在定義的Clock內定義一個靜態物件 欄位,記錄已建立的Clock物件個數 3 4 private static void plusObj() {totalClock++;} // 在定義的Clock內定義一個靜態方法,將計數加1 5 private int hour, minute, second; // 欄位成員 6 public void set( ) { …… } // 不帶引數的設定時間方法set(程式碼省略) 7 public
void set(int h, int m, int s) { …… } // 帶引數的設定時間方法set(程式碼省略) 8 public void show( ) { …… } // 顯示時間方法show(程式碼省略) 9 public Clock( ) // 定義一個構造方法 10 { ……; plusObj( ); } // 通過構造方法為鐘錶物件增加計數功能 11 }
1 public class ClockTest { // 測試類
2     public static void main(String[] args) { // 主方法Clock 
3         c1 = new Clock( ); // 建立第一個物件
4         c1 Clock c2 = new Clock( ); // 建立第二個物件c2
5         System.out.println(Clock.totalClock); // 通過類名訪問靜態成員totalClock 
6         System.out.println( c1 . totalClock );// 或通過任一物件引用(c1或c2)訪問靜態成員System.out.println( c2 . totalClock );
7     }
8 }

– 靜態欄位的記憶體分配

靜態欄位單獨分配記憶體,並且只在載入類程式碼時分配一次

Clock c1 = new Clock( );//在建立物件C1時,就載入類Clock定義程式碼 併為靜態欄位totalClock創造記憶體單元 Clock c2 = new Clock( ); c1. totalClock、c2. totalClock 任何物件都可以像訪問普通欄位一樣訪問靜態欄位 Clock . totalClock 靜態欄位是被奔了所有欄位公用的成員:類欄位;可以通過類名直接方位類欄位 如 hour minute都是例項欄位,因為只有使用運算子new建立的物件例項才會包含普通欄位