## Java編程那些事兒58—類(一)
鄭州游戲學院陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
### 8.2? 類
類(class)是Java語言的最小編程單位,也是設計和實現Java程序的基礎,本部分將深入介紹類的相關知識。
#### 8.2.1 類的概念
類是一組事物共有特征和功能的描述。類是對于一組事物的總體描述,是按照面向對象技術進行設計時最小的單位,也是組成項目的最基本的模塊。
類的概念是抽象的,類似于建筑設計中的圖紙,是對于現實需要代表的具體內容的抽象。類只包含框架結構,而不包含具體的數據。所以類代表的是總體,而不代表某個特定的個體。
例如設計電腦(computer)這個類,電腦是一組事物,則該類中包含的常見特征如下:
1.? 類型:筆記本或臺式機
2.? 內存容量
3.? 硬盤容量
4.? CPU類型
5.? 屏幕尺寸
6.? 主板類型
對于每一臺具體的電腦來說,每個特征都有自己具體的數值,或者說是將特征數據具體化,而類需要代表的是總體特征,只需要具備特征的類型和結構,不需要具有具體的數值,因為一般一組事物的某個特征的數值都是不盡相同的,但是都統一的具備該特征。
同理,如果設計登錄模塊中的用戶(user)類,則該類中包含的常見特征如下:
1.? 用戶名
2.? 密碼
對于每個具體的用戶來說,都有自己特定的用戶名和密碼,但是對于用戶這個類來說,只需要具備用戶名和密碼這兩個特征的類型和結構即可。從這里也可以很直觀的體會到,類是抽象的,是一組事物共有特征的描述。
上面是對于類結構具體特征的描述,其實類中除了包含特征的描述以外,還可以包含該類事物共有的功能,這些功能也是類的核心內容。
例如電腦這個類,包含的基本功能有:
1.? 打開
2.? 關閉
用戶這個類,包含的基本功能有:
1.? 登錄
通過在類的內部包含共有的功能,使得每個類都可以在內部實現一些規定的功能,從而減少和外部的交互,降低整個項目的復雜度。
這就是面向對象技術中類的概念的基本描述,每個類就代表一組事物,通過基本的特征和功能實現該類事物在項目內部的表達。
以上是從設計角度理解類的概念,其實從語法角度理解類的概念也很簡單,類就是一種復合數據類型,或者說是一種程序員設計的新類型。因為在實際開發中,程序員可以根據需要聲明新的類,所以在面向對象的開發中,程序員可以根據需要設計新的數據類型——類,從而實現項目要求的功能。
把設計角度中類的概念,轉換為語法角度類的概念,是每個面向對象技術初學者都必須經歷的階段,通過進行該轉換,可以把虛擬的類的概念轉換成具體的類的概念,也是面向對象技術入門的標志。
對于一組事物來說,共有的特征和功能有很多,在實際抽象成類時,只需要抽象出實際項目中的需要的屬性和功能即可。
#### 8.2.2 類的聲明
類是一種復合數據類型,則聲明一個類就相當于創建了一種新的數據類型,在面向對象技術中就通過不斷的創建新的數據類型來增強程序可以代表的數據的能力。
類聲明總體的語法格式如下:
~~~
?????????????????? 訪問控制符? [修飾符]? class?? 類名{
??????????????????????????? [屬性聲明]
??????????????????????????? [方法聲明]
??????????????????????????? [構造方法聲明]
?????????????????? }
~~~
說明:該語法格式中中括號內部的部分為可選。
其中訪問控制符用于限定聲明的類在多大范圍內可以被其它的類訪問,主要有默認訪問控制符(無關鍵字)和public;修飾符用于增強類的功能,使聲明的類具備某種特定的能力;class是聲明類時使用的關鍵字;類名是一個標識符,用于作為新聲明的類的名稱,要求必須符合標識符的命名規范。注:在Java語言的編碼規范中,類名第一個字母要求大寫。
例如如下示例:
?????????????????? public class Computer{}
?????????????????? class User{}
接著的大括號內部用于聲明類的內部結構,類內部一般包括三類聲明,且這三類聲明都是可選的。說明如下:
1.? 屬性聲明
用于代表共有特征
2.? 方法聲明
用于代碼共有功能
3.? 構造方法聲明
用于初始化類的變量
下面是這些聲明的詳細說明。
##### 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方法,在方法內部根據邏輯書寫對應的實現代碼。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結