類(class)是Java語言的最小編程單位,也是設計和實現Java程序的基礎,本部分將深入介紹類的相關知識。
8.2.1 類的概念
類是一組事物共有特征和功能的描述。類是對於一組事物的總體描述,是按照面向對象技術進行設計時最小的單位,也是組成項目的最基本的模塊。
類的概念是抽象的,類似於建築設計中的圖紙,是對於現實需要代表的具體內容的抽象。類只包含框架結構,而不包含具體的數據。所以類代表的是總體,而不代表某個特定的個體。
例如設計電腦(computer)這個類,電腦是一組事物,則該類中包含的常見特征如下:
l 類型:筆記本或台式機
l 內存容量
l 硬盤容量
l CPU類型
l 屏幕尺寸
l 主板類型
對於每一台具體的電腦來說,每個特征都有自己具體的數值,或者說是將特征數據具體化,而類需要代表的是總體特征,只需要具備特征的類型和結構,不需要具有具體的數值,因為一般一組事物的某個特征的數值都是不盡相同的,但是都統一的具備該特征。
同理,如果設計登錄模塊中的用戶(user)類,則該類中包含的常見特征如下:
l 用戶名
l 密碼
對於每個具體的用戶來說,都有自己特定的用戶名和密碼,但是對於用戶這個類來說,只需要具備用戶名和密碼這兩個特征的類型和結構即可。從這裡也可以很直觀的體會到,類是抽象的,是一組事物共有特征的描述。
上面是對於類結構具體特征的描述,其實類中除了包含特征的描述以外,還可以包含該類事物共有的功能,這些功能也是類的核心內容。
例如電腦這個類,包含的基本功能有:
l 打開
l 關閉
用戶這個類,包含的基本功能有:
l 登錄
通過在類的內部包含共有的功能,使得每個類都可以在內部實現一些規定的功能,從而減少和外部的交互,降低整個項目的復雜度。
這就是面向對象技術中類的概念的基本描述,每個類就代表一組事物,通過基本的特征和功能實現該類事物在項目內部的表達。
以上是從設計角度理解類的概念,其實從語法角度理解類的概念也很簡單,類就是一種復合數據類型,或者說是一種程序員設計的新類型。因為在實際開發中,程序員可以根據需要聲明新的類,所以在面向對象的開發中,程序員可以根據需要設計新的數據類型——類,從而實現項目要求的功能。
把設計角度中類的概念,轉換為語法角度類的概念,是每個面向對象技術初學者都必須經歷的階段,通過進行該轉換,可以把虛擬的類的概念轉換成具體的類的概念,也是面向對象技術入門的標志。
對於一組事物來說,共有的特征和功能有很多,在實際抽象成類時,只需要抽象出實際項目中的需要的屬性和功能即可。
8.2.2 類的聲明
類是一種復合數據類型,則聲明一個類就相當於創建了一種新的數據類型,在面向對象技術中就通過不斷的創建新的數據類型來增強程序可以代表的數據的能力。
類聲明總體的語法格式如下:
訪問控制符 [修飾符] class 類名{
[屬性聲明]
[方法聲明]
[構造方法聲明]
}
說明:該語法格式中中括號內部的部分為可選。
其中訪問控制符用於限定聲明的類在多大范圍內可以被其它的類訪問,主要有默認訪問控制符(無關鍵字)和public;修飾符用於增強類的功能,使聲明的類具備某種特定的能力;class是聲明類時使用的關鍵字;類名是一個標識符,用於作為新聲明的類的名稱,要求必須符合標識符的命名規范。注:在Java語言的編碼規范中,類名第一個字母要求大寫。
例如如下示例:
public class Computer{}
class User{}
接著的大括號內部用於聲明類的內部結構,類內部一般包括三類聲明,且這三類聲明都是可選的。說明如下:
l 屬性聲明
用於代表共有特征
l 方法聲明
用於代碼共有功能
l 構造方法聲明
用於初始化類的變量
下面是這些聲明的詳細說明。
8.2.2.1 屬性聲明
屬性,有些翻譯為域、字段等,屬性是類內部代表共有特征的結構,或者可以把屬性理解為類的某個具體特征,類通過一系列的屬性來代表一種新的數據類型。對於類比較基礎的理解就是通過多個屬性組合成的新的數據類型,這也是復合數據類型的由來。
屬性聲明的語法格式如下:
訪問控制符 [修飾符] 數據類型 屬性名[=值];
屬性的訪問控制符限定該屬性被訪問的范圍,包含如下四種:public、protected、默認的(無關鍵字)和private,分別代表不同的訪問限制,具體的限制范圍後續將有詳細說明。
修飾符用於使屬性具備某種特定的功能。
數據類型為該屬性的類型,可以是Java語言中的任意數據類型,也就是說,既可以是基本數據類型也可以是復合數據類型。
屬性名是一個標識符,用於代表該屬性的名稱,在聲明屬性時的同時可以為該屬性進行賦值。
示例格式為:
public int cpuType;
public char sex = ‘男’;
在實際聲明屬性時,也可以一次聲明多個屬性,例如:
public int x = 10, y = 20;
不過為了程序結構的清晰,一般書寫為如下格式:
public int x = 10;
public int y = 20;
另外,屬性的作用范圍是類的內部,可以在類內部的任何位置引用屬性,包括在方法和構造方法的內部,而不論屬性是否聲明在方法的上面。
總得來說,類就是通過一系列屬性的組合成為一種新的數據類型,從而可以代表一種更復雜的結構,也相當於為程序員提供了一種組合已有數據類型形成新數據類型的方法,從而更直觀的去代表代表需要表達的數據。
8.2.2.2 方法聲明
方法在類的內部代表該類具有的共有功能,將這些功能以方法的形式放置在類的內部,可以在需要時進行調用。
方法的聲明和前面講解的方法一致,只是在類內部增加了屬性以後,可以在方法內部直接進行訪問,而不需要進行參數傳遞了。
關於方法的聲明示例如下:
public class Box{
int width;
int height;
int length;
public int vol(){
return width * height * length;
}
}
在該示例中,聲明了一個名字為Box的類,假設使用這個類來代表箱子,其中包含三個屬性:length、width和height,依次代表箱子的長寬高,則在該類內部包含一個基本的功能,求箱子體積的vol方法,該方法的功能是計算箱子的體積。
下面是關於上面提到的用戶類的基本實現,示例代碼如下:
public class User{
public String username;
public String password;
public boolean login(){
邏輯代碼
}
}
在User類的內部,包含用戶名和密碼這兩個屬性,根據需要選擇Java語言提供的String字符串類型進行代表,然後在該類的內部聲明登錄的login方法,在方法內部根據邏輯書寫對應的實現代碼。