国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

全面理解Java類和對象

2019-11-26 14:14:09
字體:
供稿:網(wǎng)友

面向?qū)ο蟮某绦蚴怯蓪ο蠼M成的,每個對象包含對用戶公開的特定功能部分和隱藏的實現(xiàn)部分。在面向?qū)ο蟪绦蛟O(shè)計(OOP)中,不必關(guān)心對象的具體實現(xiàn)。在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計中,算法是第一位的,數(shù)據(jù)結(jié)構(gòu)是第二位的,即首先確定如何操作數(shù),再考慮如何組織數(shù)據(jù),以方便操作。而OOP則顛倒了這種次序,將數(shù)據(jù)放在第一位,然后再考慮操作數(shù)據(jù)的算法。

一、類

類是構(gòu)造對象的模板和藍(lán)圖。通俗地說,類相當(dāng)于建筑的圖紙,而對象相當(dāng)于建筑物。由類構(gòu)造對象的過程稱為創(chuàng)建對象的實例。

Java中通過關(guān)鍵字class定義“類”,后跟類名。例如:

class Person{  // 類的主體內(nèi)容}

定義了一個Person類。

1.字段和方法

定義一個類時,可以在類里設(shè)置兩種類型的元素:數(shù)據(jù)成員和成員函數(shù)。其中數(shù)據(jù)成員是一種對象,可以是任何類型。如果是指向?qū)ο蟮木浔瑒t必須初始化這個句柄,通過構(gòu)造器與一個實際對象連接起來。如果是基本數(shù)據(jù)類型,則可以在類定義的位置直接初始化。

每個對象都為自己的數(shù)據(jù)成員保有存儲空間;數(shù)據(jù)成員不會在對象之間共享。

class Person{  String name;  double salary;}

通過new關(guān)鍵字創(chuàng)建一個對象。如:

Person p = new Person();

(1)主成員的默認(rèn)值

某個主數(shù)據(jù)類型屬于一個類成員,那么即是不明確進(jìn)行初始化,也可以保證他們獲得一個默認(rèn)值。

主類型 默認(rèn)值
Boolean false
Char '/u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

如果一個變量作為類的成員變量,那么對于主類型一定會得到初始化,要特別注意初始化的值。對于局部變量則會得到一些隨機(jī)值,如:int x;不會自動初始化為0。

(2)方法

方法的基本組成部分包括名字自變量返回類型以及主體。方法的基本形式為:

返回類型 方法名(/*自變量列表*/) {/* 方法體 */}

返回類型是指調(diào)用方法之后返回的數(shù)值類型。方法名是對具體方法的標(biāo)識和引用。自變量列表列出****了想傳遞給方法的信息類型和名稱。

在Java中方法的調(diào)用形式為對象名.方法名

1. 用句柄操作對象

盡管Java是完全面向?qū)ο蟮?/strong>。但是,操作的標(biāo)識符實際指向一個對象的“句柄”,又稱“引用”。句柄是可以獨(dú)立存在的,并不是說,擁有一個句柄就必須有一個對象與之對應(yīng)。比如,int i;定義了一個整型變量i,并不表示它一定有值。如,創(chuàng)建一個String類型的句柄:

String s;

這里只是創(chuàng)建了句柄,并沒有創(chuàng)建對象。由于s并沒有與之關(guān)聯(lián)的對象,如果調(diào)用s將出現(xiàn)異常。所以,創(chuàng)建時需要進(jìn)行初始化。

String s = "hello";

在Java中,通過new關(guān)鍵字創(chuàng)建對象,它將返回對象的引用(即句柄)。所以

String s = new String("hello");

創(chuàng)建了一個內(nèi)容為"hello"的String對象,并將該對象的句柄(引用)交給了s保存。

2. 數(shù)據(jù)存儲的位置

1.寄存器。最快的保存區(qū)域,位于處理器內(nèi)部。寄存器的大小有限,由編譯器的分配大小。

2.堆棧。駐留在常規(guī)RAM(隨機(jī)訪問存儲器)區(qū)域,通過“堆棧指針”可以改變大小。堆棧指針向下移動,會創(chuàng)建新的內(nèi)存空間;向上移動,則釋放內(nèi)存空間。創(chuàng)建程序時,Java編譯器必須準(zhǔn)確地知道堆棧內(nèi)保存的所有數(shù)據(jù)的“長度”和“存在的時間”,編譯器由此生成相應(yīng)的代碼,以便移動指針。Java對象的句柄保存在其中,但是Java對象并不保存在堆棧中。

3.堆。常規(guī)用途的內(nèi)存池,其中保存了Java對象。編譯器不知道也不需要知道從“內(nèi)存堆”或“堆”里分配多少存儲空間、數(shù)據(jù)存留多長時間。

4.靜態(tài)存儲。靜態(tài)指位于固定的位置(在RAM中)。程序運(yùn)行期間,靜態(tài)存儲的數(shù)據(jù)將隨時供調(diào)用。通過static關(guān)鍵字指出一個對象的特定元素是靜態(tài)的。Java本身本不可能置于靜態(tài)存儲空間。

5.常數(shù)存儲。常數(shù)值通常置于程序代碼內(nèi)部,永遠(yuǎn)不會改變。

6.非RAM存儲。若數(shù)據(jù)完全獨(dú)立于一個程序之外,則程序不運(yùn)行時仍可存在,并在程序的控制范圍之內(nèi)。例如,流式對象和固定對象。

二、對象

對象的三個主要特性:

•對象的行為――可以對對象施加哪些操作,或可以對對象施加哪些方法?

•對象的狀態(tài)――當(dāng)時加那些方法時,對象如何響應(yīng)?

•對象標(biāo)識――如何辨別具有相同行為與狀態(tài)的不同對象?

對象的行為是由可調(diào)用的方法定義的。每個對象都保存著描述當(dāng)前特征的信息,這就是對象的狀態(tài)。對象的狀態(tài)不會自發(fā)改變。一個設(shè)計良好的類,它的對象只能通過調(diào)用方法實現(xiàn),如果不經(jīng)過方法調(diào)用就可以改變對象的狀態(tài),說明封裝性受到了破壞。

封裝:將數(shù)據(jù)和行為組合在一個包中,并對對象的使用者隱藏了數(shù)據(jù)的實現(xiàn)方法。封裝的關(guān)鍵在于絕對不能讓類中的方法直接地訪問其他類的實例域。程序僅通過對象的方法域?qū)ο髷?shù)據(jù)進(jìn)行交互。

對象中的數(shù)據(jù)稱為實例域(instance field)或?qū)傩浴2倏v數(shù)據(jù)的過程稱為方法(method)。對于每個特定的對象都有一組特定的實例域值(屬性值),這些值的集合就是該對象的當(dāng)前狀態(tài)。

類之間的關(guān)系

類之間常見的關(guān)系:

•依賴(“use-a”): 一個類的方法操縱另一個類的對象。

•聚合(“has-a”): 一個類的對象包含另一個類的對象。

•繼承(“is-a”): 用于表示特殊與一般的關(guān)系。如果類A擴(kuò)展類B(A繼承B),類A不但包含類B的方法,還有擴(kuò)展的方法。

一個對象并沒有實際包含一個對象,而僅僅引用一個對象。

在Java中,任何對象變量的值都是都是對存儲在另外一個地方的一個對象的引用。new操作符的返回值也是一個引用。

以上這篇全面理解Java類和對象就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天祝| 资溪县| 长武县| 南雄市| 柞水县| 洞口县| 濮阳县| 崇礼县| 成武县| 泊头市| 宁国市| 永城市| 建水县| 富民县| 得荣县| 正阳县| 西和县| 博湖县| 温州市| 沽源县| 巴楚县| 商水县| 云林县| 平邑县| 万山特区| 万州区| 布尔津县| 肥西县| 赤壁市| 滕州市| 沾化县| 峡江县| 兰考县| 巩义市| 博野县| 钟山县| 贵南县| 宝清县| 沂水县| 宜春市| 长子县|