第二章----對象和類

Java

1. 對象

名詞解釋

  • OOA-Object Oriented Analysis-面向?qū)ο蠓治?/p>

  • OOD-Object Oriented Design-面向?qū)ο笤O(shè)計

  • OOP-Object Oriented Programming-面向?qū)ο蟪绦蛟O(shè)計

面向?qū)ο蠡咎匦?/p>

  • 萬物皆可為對象:任何一件事物都可以表示為程序中的對象

  • 程序是對象的集合:它們通過發(fā)送信息來告知彼此所需要做的

  • 每個對象都有自己的或有其他對象所構(gòu)成的存儲:如:對象中引用其他對象

  • 每個對象都擁有其類型:每個對象都是某個類class的實例景图,這里的類就是指類型

  • 某一指定類型的所有對象都可以接受相同的信息:如:person對象擁有father和mother對象的所有性質(zhì)

一句話總結(jié)就是:對象具有狀態(tài)行為和標識英支,內(nèi)部數(shù)據(jù)即狀態(tài)-方法即行為-存在內(nèi)存中的唯一地址即標識

面向?qū)ο笕齻€特性

  • 封裝(encapsulate):把客觀事物封裝成抽象的類,并且類中的屬性和方法有自己指定的訪問權(quán)限潜沦。隱藏具體細節(jié),是調(diào)用者只能遵循自己定義的規(guī)則绪氛,方便權(quán)限控制唆鸡。
權(quán)限控制 本包 子類 外部包
private X X X
default X X
protected X
public
  • 繼承:指子類有父類所有的功能,并可以重寫或補充自己的方法钞楼。
    關(guān)鍵字:extends 喇闸,Java是單繼承關(guān)系所有對象的父類都是Object,多繼承容易使代碼混亂询件,單繼承使只有一個父類代碼邏輯更清晰如:它們都是相同的數(shù)據(jù)類型都有相同的方法功能且單繼承結(jié)構(gòu)對垃圾回收機制實現(xiàn)變得容易的多燃乍。Java是單繼承多實現(xiàn)接口的結(jié)構(gòu)。
    重載(overloading):同一個類中有相同的方法名字不同的參數(shù)叫做方法重載宛琅。
    重寫(overriding):兩個類之間必須存在繼承關(guān)系刻蟹,且子類重寫了父類中有的方法,包括方法名字參數(shù)返回值都相同嘿辟,如果需要調(diào)用父類中方法須用super關(guān)鍵字調(diào)用舆瘪。

  • 多態(tài):指一個實現(xiàn)類在不同的情景下有不同的實現(xiàn)方式,即不同的類可以實現(xiàn)相同的接口來完成不同的任務(wù)红伦,但我們可以通過相同的方式予以調(diào)用英古。
    條件:必須存在繼承關(guān)系,子類重寫父類的方法昙读,向下轉(zhuǎn)型召调。
    轉(zhuǎn)化規(guī)則:子類轉(zhuǎn)換父類向上轉(zhuǎn)型可直接賦值,父類轉(zhuǎn)換子類向下轉(zhuǎn)型許強制類型轉(zhuǎn)換且無法調(diào)用子類特有方法。

對象的生命周期

對象在堆(heap)的內(nèi)存池中動態(tài)的創(chuàng)建唠叛,這種方式只有運行時才能知道有多少對象需要被創(chuàng)建只嚣,他們的生命周期如何,以及它們的具體類型艺沼。

Java用NEW關(guān)鍵字來創(chuàng)建對象册舞,Java提供垃圾回收的機制,它可以自動發(fā)現(xiàn)對象何時不再使用并繼而銷毀它障般。

異常處理

異常也是一種對象调鲸,它往往處于編程語言中,與程序正常執(zhí)行路徑并行挽荡,在發(fā)生錯誤時執(zhí)行另一條路徑线得。因為是完全另一條路徑執(zhí)行,所以不會干擾正常代碼的運行徐伐。

Java從一開始就內(nèi)置了異常處理贯钩,它要求你必須使用它,如果沒有編寫正確的異常處理代碼办素,在編譯時就會報錯角雷,這也是Java健壯性和安全性的表現(xiàn)。

并發(fā)編程

我們想把問題分割成多個可獨立運行的任務(wù)性穿,在程序中這些獨立運行的部分叫做線程勺三,這就是并發(fā)。

當多個線程訪問同一個資源的時候有可能會有問題需曾,我們必須使某個線程鎖定某個資源吗坚,完成其任務(wù)后釋放資源,這是線程鎖也叫同步線程呆万。

對象存儲位置

寄存器:這是最快的儲存區(qū)商源,位于處理器內(nèi)部,我們無法用程序操控它也無法感知它的存在谋减。

堆棧:位于RAM(隨機訪問儲存器)中牡彻,堆棧指針下移分配內(nèi)存上移釋放內(nèi)存,速度僅次于寄存區(qū)出爹,Java系統(tǒng)必須知道所有項的生命周期以便用上下移動堆棧指針庄吼,雖然某些數(shù)據(jù)(對象引用)存儲其中,但對象本身并不在其中严就。

堆:一種通用的內(nèi)存池也存在RAM中总寻,用于存放所有Java對象。不需要知道對象的生命周期梢为,需要的時候直接NEW出一個對象堆堆自動分配空間渐行,但當清理的時候卻要花費點時間技矮。

常量儲存:常量因為是不會被改變的所以通常放在程序中,也可以放在ROM(只讀存儲器)中殊轴。

非RAM存儲:一些對象完全存活于數(shù)據(jù)之外比如:流對象和持久化對象。這種對象通常存儲在硬盤上袒炉。

特例基本類型:創(chuàng)建一個并非是引用的自動變量旁理,直接存儲在棧中,因此更加高效我磁。

用引用操作對象:就像遙控器操縱電視機一樣孽文,沒有電視機遙控器還可以存在只是不能發(fā)出任何消息,所以為了安全起見創(chuàng)建一個引用的時候就初始化一個對象夺艰。

2. 類

作用域

作用域決定了其內(nèi)部變量的可見性和生命周期芋哭,用花括號表示。但用new創(chuàng)建的引用對象郁副,它可以存活于作用域之外减牺,雖然引用對象不能用了,但是new出來的對象還一直在內(nèi)存中存谎,Java通過垃圾回收機制最終回收無用的對象拔疚,finalize方法在垃圾回收之前調(diào)用,但不推薦使用既荚。

用class關(guān)鍵字后面緊跟著新的類型名稱稚失,用來抽象某一類的對象。命名方式:首字母大寫每個單詞的首字母大寫恰聘。

依賴(uses-a)(dependence)

聚合(has-a)(aggregation)

繼承(is-a)(inheritance)

設(shè)計類時盡量做到高內(nèi)聚低耦合

所有的標識符都應(yīng)該以字母(A-Z或者a-z),美元符($)句各、或者下劃線(_)開始。

屬性

屬性就是對象本身的一些描述字段晴叨,他可以是基本數(shù)據(jù)類型也可以是其他對象的引用凿宾。命名方式:首字母小寫每個單詞的首字母大寫。

方法-參數(shù)-返回值

方法是對象行為的描述兼蕊,可以有很多方法菌湃,利用傳遞的參數(shù)做業(yè)務(wù)處理返回想要得到的值罢杉。命名方式:首字母小寫每個單詞的首字母大寫熟呛。

構(gòu)造器:與類名相同胖笛,每個類可以有一個以上的構(gòu)造器燕垃,沒有返回值妨马,伴隨new關(guān)鍵字被調(diào)用术健。一個類中如果沒有構(gòu)造器矫钓,系統(tǒng)就會默認一個無參的構(gòu)造器署拟,數(shù)值型為0蕾久,布爾型為false势似,對象為null。

static

static類是不被允許的,通常使用內(nèi)部類實現(xiàn)靜態(tài)類履因。

static方法在類被加載后jvm就可以在運行時數(shù)據(jù)區(qū)讀取到障簿,因此不依賴創(chuàng)建對象就可以直接調(diào)用類名.方法名()≌て可以調(diào)用其他static方法站故,只能調(diào)用static數(shù)據(jù),不能用super和this調(diào)用毅舆。

static變量在jvm加載的時候只會分配一塊內(nèi)存(節(jié)省內(nèi)存)西篓,可以用類名.變量名來調(diào)用,private static表示私有的靜態(tài)數(shù)據(jù)憋活。而實例變量會每new一個對象就是一塊內(nèi)存岂津。

static代碼塊通常叫做靜態(tài)代碼塊,在類加載的時候被順序執(zhí)行悦即,在構(gòu)造方法之前執(zhí)行吮成。

final

final類不能被繼承,里面的方法都是final的辜梳,沒有繼承所以就沒有重寫赁豆。

final方法不允許被覆蓋,為了鎖定其方法不被擴展或者為了提高效率冗美。private方法無法繼承因此private方法默認是final的(有爭議)魔种。

final變量一但被賦值就無法改變。

final參數(shù)可以運用但不能被改變粉洼。

final+static表示不能被改變的靜態(tài)數(shù)據(jù)或方法也叫全局常量节预。

初始化數(shù)據(jù)

在聲明中賦值

在初始化塊中賦值

在構(gòu)造方法中賦值

聲明>初始化塊>構(gòu)造方法

包(package)

將類組織起來,一般用域名的逆序作為包名属韧。如果一個類里面引用相同名字的外部類安拟,可以通過inport關(guān)鍵字導(dǎo)入包路徑來區(qū)分。

注釋

單行(//)以及多行注釋(/* */)宵喂,注釋內(nèi)容Java虛擬機會自動過濾糠赦。

注釋文檔:JavaDoc可以生成html文檔,以@符號為標識符如:@version锅棕。


不積小流拙泽,無以成江海

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裸燎,隨后出現(xiàn)的幾起案子顾瞻,更是在濱河造成了極大的恐慌,老刑警劉巖德绿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷荤,死亡現(xiàn)場離奇詭異退渗,居然都是意外死亡,警方通過查閱死者的電腦和手機蕴纳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門会油,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人古毛,你說我怎么就攤上這事翻翩。” “怎么了喇潘?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梭稚。 經(jīng)常有香客問我颖低,道長,這世上最難降的妖魔是什么弧烤? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任忱屑,我火速辦了婚禮,結(jié)果婚禮上暇昂,老公的妹妹穿的比我還像新娘莺戒。我一直安慰自己,他們只是感情好急波,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布从铲。 她就那樣靜靜地躺著,像睡著了一般澄暮。 火紅的嫁衣襯著肌膚如雪名段。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天泣懊,我揣著相機與錄音伸辟,去河邊找鬼。 笑死馍刮,一個胖子當著我的面吹牛信夫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卡啰,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼静稻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匈辱?” 一聲冷哼從身側(cè)響起姊扔,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梅誓,沒想到半個月后恰梢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛南,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年嵌言,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗅回。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡摧茴,死狀恐怖绵载,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛白,我是刑警寧澤娃豹,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站购裙,受9級特大地震影響懂版,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躏率,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一躯畴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薇芝,春花似錦蓬抄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耍贾,卻和暖如春峭状,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逼争。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工优床, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人誓焦。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓胆敞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杂伟。 傳聞我的和親對象是個殘疾皇子移层,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345