鍍金池/ 教程/ Java/ http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類(lèi)
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類(lèi)
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類(lèi)型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對(duì)象
Java類(lèi)基礎(chǔ)
Java接口繼承
Java類(lèi)方法
Java訪問(wèn)級(jí)別
Java對(duì)象克隆
Java初始化塊
Java可變長(zhǎng)度參數(shù)
Java接口字段
Java對(duì)象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計(jì)
Java對(duì)象finalize()方法
Java抽象類(lèi)和方法
Java Object類(lèi)
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類(lèi)型的限制
Java main()方法
Java Enum類(lèi)
Java注解用法
Java枚舉比較
Java注解類(lèi)型
Java內(nèi)部類(lèi)成員
Java繼承和構(gòu)造函數(shù)
Java類(lèi)實(shí)例化
Java內(nèi)部類(lèi)類(lèi)型
Java對(duì)象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類(lèi)型
Java異常類(lèi)
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類(lèi)
Java類(lèi)成員訪問(wèn)級(jí)別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語(yǔ)句的用法)

http://www.yiibai.com/java_object_oriented_design/java_class_bas

類(lèi)是什么?

類(lèi)在面向?qū)ο蟮木幊谭妒降幕締挝弧K鼈冇米髂0鍋?lái)創(chuàng)建對(duì)象。
Java中的類(lèi)可以包含五個(gè)組件:

  • 字段(域)
  • 方法
  • 構(gòu)造器(也叫構(gòu)造函數(shù))
  • 靜態(tài)初始化器
  • 實(shí)例初始化程序

字段和方法也稱為類(lèi)的成員。類(lèi)和接口也可以是一個(gè)類(lèi)的成員。類(lèi)可以有零個(gè)或多個(gè)類(lèi)成員。
構(gòu)造函數(shù)用于創(chuàng)建類(lèi)的對(duì)象。所以必須至少有一個(gè)類(lèi)的構(gòu)造函數(shù)。

初始化器用于初始化類(lèi)的字段。在一個(gè)類(lèi)中可以有零個(gè)或多個(gè)靜態(tài)或?qū)嵗?lèi)型的初始化器。

聲明一個(gè)類(lèi)

在Java中聲明類(lèi)的一般語(yǔ)法如下 -

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

是對(duì)類(lèi)聲明有特殊含義的關(guān)鍵字。類(lèi)聲明可以有零個(gè)或多個(gè)修飾符(modifiers)。

關(guān)鍵字 class 用于聲明一個(gè)類(lèi)。

<class name>是用戶定義的類(lèi)名稱,它應(yīng)該是有效的標(biāo)識(shí)符組成。
每個(gè)類(lèi)都有一個(gè)主體(body),它在一對(duì)大括號(hào)({})中指定。類(lèi)的主體包含其不同的組件,例如字段,方法等。

下面的代碼定義了一個(gè)名為Dog的類(lèi),它具有一個(gè)空主體。Dog類(lèi)不使用任何修飾符。如下代碼所示 -

class Dog  {
// 主體是空的,什么也沒(méi)有定義
}

類(lèi)中的字段

類(lèi)的字段表示類(lèi)的屬性。

Dog類(lèi)的每個(gè)對(duì)象都有兩個(gè)屬性:名稱(name)和性別(gender)。Dog類(lèi)應(yīng)包括兩個(gè)字段的聲明:一個(gè)表示名稱,一個(gè)表示性別。

這些字段在類(lèi)的主體中聲明。 在類(lèi)中聲明一個(gè)字段的一般語(yǔ)法是 -

<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;
}

字段聲明可以使用零個(gè)或多個(gè)修飾符。字段的數(shù)據(jù)類(lèi)型位于其名稱之前。 或者還可以使用值來(lái)初始化每個(gè)字段的值。

以下代碼顯示如何向Dog類(lèi)添加字段:

class Dog  {
    String  name; 
    String gender;
}

在java中,一般是用大寫(xiě)字母開(kāi)始一個(gè)類(lèi)的名稱(比較規(guī)范,推薦的用法),并大寫(xiě)后續(xù)的單詞,例如:Table,FirstTime,OrderDetail等等。而使用 table,firstTime,order_detail 等這樣的形式來(lái)命名類(lèi)不是一個(gè)規(guī)范的作法。

字段和方法的名稱應(yīng)以小寫(xiě)字母開(kāi)頭,后面的單詞的第一個(gè)字母應(yīng)該大寫(xiě),例如:namefirstName,orderList等等。

Dog類(lèi)聲明兩個(gè)字段:namegender。兩個(gè)字段都是可存儲(chǔ)字符串的String類(lèi)型。
Dog類(lèi)的每個(gè)實(shí)例都有這兩個(gè)字段的副本。

Java中一個(gè)類(lèi)有兩種類(lèi)型的字段:

  • 類(lèi)字段
  • 實(shí)例字段

有時(shí)屬性屬于類(lèi)本身,不屬于該類(lèi)的任何特定實(shí)例。
所有狗的數(shù)量應(yīng)屬于狗類(lèi)本身。狗的數(shù)量不存在于狗類(lèi)的任何特定實(shí)例。

只有一個(gè)類(lèi)屬性的副本存在,而不考慮實(shí)例數(shù)。類(lèi)字段也稱為類(lèi)變量。實(shí)例字段也稱為實(shí)例變量。

namegenderDog類(lèi)的兩個(gè)實(shí)例變量。而類(lèi)的變量必須使用static關(guān)鍵字作為修飾符聲明。

以下代碼帶中,Dog類(lèi)的聲明有一個(gè)類(lèi)變量 - count。如下所示 -

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

類(lèi)變量稱為靜態(tài)變量。 實(shí)例變量被稱為非靜態(tài)變量。

使用示例

在這個(gè)示例中,定義一個(gè) Dog 類(lèi),并實(shí)例化三個(gè) Dog 類(lèi)的實(shí)例,每次實(shí)例化類(lèi)的實(shí)例時(shí),自動(dòng)將類(lèi)變量count的值加1,用來(lái)統(tǒng)計(jì)當(dāng)前有多少 Dog 類(lèi)被實(shí)例化。


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;
        // 每實(shí)例化一個(gè)對(duì)象, 類(lèi)變量 count 的值加  1 。 
        count = count + 1;
    }
}

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

       Dog dog1 = new Dog("旺財(cái)", "公");
       Dog dog2 = new Dog("阿貴", "公");
       Dog dog3 = new Dog("悠悠", "母");
       // 以下都是訪問(wèn)類(lèi)變量的方法
       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);
   }
}

執(zhí)行上面代碼,得到如下結(jié)果 -

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