類(lèi)在面向?qū)ο蟮木幊谭妒降幕締挝弧K鼈冇米髂0鍋?lái)創(chuàng)建對(duì)象。
Java中的類(lèi)可以包含五個(gè)組件:
字段和方法也稱為類(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)型的初始化器。
在Java中聲明類(lèi)的一般語(yǔ)法如下 -
<modifiers> class <class name> {
// Body of the class
}
關(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)的屬性。
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ě),例如:name
,firstName
,orderList
等等。
Dog
類(lèi)聲明兩個(gè)字段:name
和 gender
。兩個(gè)字段都是可存儲(chǔ)字符串的String
類(lèi)型。Dog
類(lèi)的每個(gè)實(shí)例都有這兩個(gè)字段的副本。
Java中一個(gè)類(lèi)有兩種類(lèi)型的字段:
有時(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í)例變量。
name
和 gender
是Dog
類(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