Java類基礎


類是什麼?

類在物件導向的程式設計正規化的基本單位。它們用作模板來建立物件。
Java中的類可以包含五個元件:

  • 欄位(域)
  • 方法
  • 構造器(也叫建構函式)
  • 靜態初始化器
  • 範例初始化程式

欄位和方法也稱為類的成員。類和介面也可以是一個類的成員。類可以有零個或多個類成員。
建構函式用於建立類的物件。所以必須至少有一個類別建構函式。

初始化器用於初始化類的欄位。在一個類中可以有零個或多個靜態或範例型別的初始化器。

宣告一個類

在Java中宣告類的一般語法如下 -

<modifiers> class <class name> {
    // Body of the class
}

是對類宣告有特殊含義的關鍵字。類宣告可以有零個或多個修飾符(modifiers)。

關鍵字 class 用於宣告一個類。

<class name>是使用者定義的類名稱,它應該是有效的識別符號組成。
每個類都有一個主體(body),它在一對大括號({})中指定。類的主體包含其不同的元件,例如欄位,方法等。

下面的程式碼定義了一個名為Dog的類,它具有一個空主體。Dog類不使用任何修飾符。如下程式碼所示 -

class Dog  {
// 主體是空的,什麼也沒有定義
}

類中的欄位

類的欄位表示類的屬性。

Dog類的每個物件都有兩個屬性:名稱(name)和性別(gender)。Dog類應包括兩個欄位的宣告:一個表示名稱,一個表示性別。

這些欄位在類的主體中宣告。 在類中宣告一個欄位的一般語法是 -

<modifiers> class  className {
   <modifiers> <data type> <field name> = initialvalue;
   <modifiers> <data type> fieldName;
}
<modifiers> class  className {
   <modifiers> <data type> <field name> = initialvalue;
   <modifiers> <data type> fieldName;
}

欄位宣告可以使用零個或多個修飾符。欄位的資料型別位於其名稱之前。 或者還可以使用值來初始化每個欄位的值。

以下程式碼顯示如何向Dog類新增欄位:

class Dog  {
    String  name; 
    String gender;
}

在java中,一般是用大寫字母開始一個類的名稱(比較規範,推薦的用法),並大寫後續的單詞,例如:TableFirstTimeOrderDetail等等。而使用 tablefirstTimeorder_detail 等這樣的形式來命名類不是一個規範的作法。

欄位和方法的名稱應以小寫字母開頭,後面的單詞的第一個字母應該大寫,例如:namefirstNameorderList等等。

Dog類宣告兩個欄位:namegender。兩個欄位都是可儲存字串的String型別。
Dog類的每個範例都有這兩個欄位的副本。

Java中一個類有兩種型別的欄位:

  • 類欄位
  • 範例欄位

有時屬性屬於類本身,不屬於該類的任何特定範例。
所有狗的數量應屬於狗類本身。狗的數量不存在於狗類的任何特定範例。

只有一個類屬性的副本存在,而不考慮範例數。類欄位也稱為類變數。範例欄位也稱為範例變數。

namegenderDog類的兩個範例變數。而類的變數必須使用static關鍵字作為修飾符宣告。

以下程式碼帶中,Dog類的宣告有一個類變數 - count。如下所示 -

class Dog  {
    String name;           // An  instance variable
    String gender;         // An  instance variable
    static long  count;    // A  class  variable  because of  the   static  modifier
}

類變數稱為靜態變數。 範例變數被稱為非靜態變數。

使用範例

在這個範例中,定義一個 Dog 類,併範例化三個 Dog 類的範例,每次範例化類的範例時,自動將類變數count的值加1,用來統計當前有多少 Dog 類被範例化。


class Dog  {
    String name;           // An  instance variable
    String gender;         // An  instance variable
    static long  count;    // A  class  variable  because of  the   static  modifier

    Dog(String name, String gender){
        this.name = name;
        this.gender = gender;
        // 每範例化一個物件, 類變數 count 的值加  1 。 
        count = count + 1;
    }
}

class Main {
   public static void main(String[] args) {

       Dog dog1 = new Dog("旺財", "公");
       Dog dog2 = new Dog("阿貴", "公");
       Dog dog3 = new Dog("悠悠", "母");
       // 以下都是存取類變數的方法
       System.out.println("dog1.count=>"+dog1.count);
       System.out.println("dog2.count=>"+dog2.count);
       System.out.println("dog3.count=>"+dog3.count);
       System.out.println("Dog::count=>"+Dog.count);
   }
}

執行上面程式碼,得到如下結果 -

dog1.count=>3
dog2.count=>3
dog3.count=>3
Dog::count=>3