對象(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的執行環境中,存儲區域一般分為兩類:
l 棧內存
該區域存儲基本數據類型
l 堆內存
存儲實際的對象內容。
而實際的對象存儲比一般變量復雜,對象的存儲分為兩部分:對象的內容、對象內容的起始地址。