類與物件的語法細則之靜態成員
阿新 • • 發佈:2020-11-16
類的靜態成員
-全域性變數、外部函式 關鍵字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– Java語言不允許在類外定義全域性變數或函式 則: 例3-13 通過靜態成員實現對鐘錶類Clock進行物件計數的Java示意程式碼(Clock.java)(定義靜態變數和靜態方法)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 }
1public 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 publicvoid 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建立的物件例項才會包含普通欄位