## Java編程那些事兒60——對象
鄭州游戲學院陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
### 8.3? 對象
對象(Object)是面向對象技術的核心,按照面向對象的思考方式,現實中的每個實體都是一個對象,比如一個人、數據庫中的一張表等,總結起來,就是面向對象技術中的經典語句——萬事萬物皆對象。
#### 8.3.1 什么是對象?
其實面向對象技術只是提供了一種思考的方式,其思考方式就是把一個復雜的結構看成是一個整體,這樣可以降低認知的復雜性。比如認識一個電腦,按照面向對象的認知方式,就是先把電腦分成一個個的對象:顯示器對象、硬盤對象、CPU對象等等,然后再一個一個的進行認知。
同時面向對象技術也是一種設計方式,其設計方式是把一個負責的模塊劃分為一個個小的模塊分開進行設計,這樣可以降低設計的復雜性。比如設計一個電腦,按照面向對象的設計方式,就是把電腦分成一個個的對象:顯示器對象、硬盤對象、CPU對象等等,然后再一個一個的進行設計。
正因為面向對象無論在認知和設計方面都降低了復雜性,所以在程序設計語言中得到了廣泛的應用。其實也就是是對現實已存在的內容的升華,所以面向對象存在于生活的很多方面,并不是計算機程序設計領域里的“陽春白雪”。
在語法角度來看,對象就是一個變量,只是該變量比較復雜,其內部既包含屬性(數據),也包含方法(功能)。在Java語言中,把復合數據類型(包括數組、類和接口)的變量都稱作對象。所以對象的概念相對來說,就顯得跟具體了。
每個對象中存儲類中對應屬性的數值,或者從數據角度來理解對象的話,也可以把對象看作是類似C語言中結構體變量類似的結構。
下面來介紹一下Java語言中對象相關的語法。
#### 8.3.2 對象的語法
對象相關的語法主要包含四個部分:對象的聲明、對象的初始化、引用對象中的屬性和引用對象中的方法。
例如,有如下一個類的代碼:
~~~
?????????????????? public? class? Box{
??????????????????????????? /**長度*/
??????????????????????????? int length;
??????????????????????????? /**寬度*/
??????????????????????????? int width;
??????????????????????????? /**高度*/
??????????????????????????? int height;
??????????????????????????? public Box(){
???????????????????????????????????? length = 10;
???????????????????????????????????? width = 10;
???????????????????????????????????? height = 10;
??????????????????????????? }
?????????????????? ???????? public Box(int l,int w,int h){
???????????????????????????????????? length = l;
???????????????????????????????????? width = w;
???????????????????????????????????? height = h;
??????????????????????????? }
??????????????????????????? /**求體積的方法*/
??????????????????????????? public int volume(){
???????????????????????????????????? return length * width * height;
??????????????????????????? }
?????????????????? }
~~~
##### 8.3.2.1 對象的聲明
對象的聲明,就是聲明一個變量,其語法格式和變量聲明的語法完全相同,格式如下:
數據類型對象名;
這里要求數據類型必須為復合數據類型,基本數據類型聲明的結構只能稱為變量,而不能稱為對象。
示例代碼:
?????????????????? Box b;
這里聲明了一個Box類型的對象b,該對象在內存中不占用存儲空間,其值為null。當然聲明對象時也可以采用如下格式:
?????????????????? Box b,b1;
##### 8.3.2.2 對象的初始化
由于只聲明的對象在內存中沒有存儲空間,所以需要為對象在內存中申請空間,并初始化各個屬性的值,這個過程稱作對象的初始化。
對象的初始化,都是通過直接或間接調用構造方法實現。對象的初始化可以和對象的聲明寫在一起,也可以分開進行書寫,其語法格式如下:
對象名 = new 構造方法(參數);
例如:
?????????????????? Box b = new Box();
?????????????????? Box b1;
?????????????????? b1 = new Box(2,3,4);
其中對象b使用Box類中不帶參數的構造方法進行初始化,按照Box類的結構,對象b中每個屬性的值被都被初始化為10。而對象b1使用Box類中帶參數的構造方法進行初始化,依據構造方法的結構,依次指定對象b1中的長、寬、高依次是2、3、4。
在初始化對象時,調用的構造方法必須在類中聲明過,否則不能調用。因為類名和構造方法的名稱相同,所以名稱一般不容易發生錯誤,在實際使用時注意參數列表的結構也需要匹配。
有些時候,因為某些原因,把構造方法隱藏起來,這個時候可以使用其它的途徑來創建對象,例如使用某些方法的返回值進行初始化等。
對象在初始化以后就可以進行使用了。
##### 8.3.2.3 引用對象中的屬性
對象是一個復合變量,很多時候需要引用對象內部的某一個屬性,其語法格式為:
對象名.屬性名
該語法中“.”代表引用,使用該表達式可以引用對象內部的屬性,則該表達式的類型和該屬性在類中聲明的類型一致。
例如:
b.width = 5;
該語法中,b是對象名,width是對象b中的屬性,因為在類Box中width屬性的類型是int型,則該表達式的類型也是int類型,在程序中可以把該表達式看成是int類型的變量進行實際使用。
而在實際的面向對象程序中,一般都避免使用對象直接引用屬性(使用訪問控制符實現訪問限制),而替代的以getter和setter方法進行訪問。
##### 8.3.2.4 引用對象中的方法
如果需要執行對象內部的功能,則需要引用對象中的方法,也就是面向對象術語中的“消息傳遞”,其語法格式如下:
對象名.方法名(參數)
這里“.”也代表引用,使用該代碼可以引用對象內部的方法,該語法中的參數必須和引用方法的聲明結構匹配。
例如:
int v = b.volume();
這里引用對象b中的volume方法,實現的功能是求對象b的體積,并且把求得的體積賦值給變量v。
在實際的項目中,通過引用對象中的方法實現項目中信息的傳遞以及功能的實現,通過對象和對象之間的關聯,構造成一個有機的系統,從而代表實際項目中標的各種需求。
對象相關的語法就介紹這么多,在后續的學習中將經常用到。
#### 8.3.3 對象的存儲形式
對象是一個復合數據類型的變量,其存儲方式和一般變量的存儲方式也不相同。在Java的執行環境中,存儲區域一般分為兩類:
1.? 棧內存
該區域存儲基本數據類型
2.? 堆內存
存儲實際的對象內容。
而實際的對象存儲比一般變量復雜,對象的存儲分為兩部分:對象的內容、對象內容的起始地址。
- 前言
- (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)網絡編程小結