1.1 抽象過(guò)程
面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-oriented Programming, OOP)
1.2 每個(gè)對(duì)象都有一個(gè)接口
因?yàn)轭惷枋隽司哂邢嗤匦裕〝?shù)據(jù)元素)和行為(功能)的對(duì)象集合,所以一個(gè)類實(shí)際上就是一個(gè)數(shù)據(jù)類型。
要有某種方式產(chǎn)生對(duì)對(duì)象的請(qǐng)求,使對(duì)象完成各種任務(wù)侈离。
每個(gè)對(duì)象都只能滿足某些請(qǐng)求,這些請(qǐng)求由對(duì)象的接口(interface)所定義锹淌,即接口確定了對(duì)某一特定對(duì)象所能發(fā)出的請(qǐng)求备图。
1.3 每個(gè)對(duì)象都提供服務(wù)
可以將對(duì)象理解為服務(wù)提供者,有助于提高對(duì)象的內(nèi)聚性蹦肴。
1.4 被隱藏的具體實(shí)現(xiàn)
訪問(wèn)控制:1.讓客戶端程序員無(wú)法觸及他們不應(yīng)該觸及的部分僚碎;2.允許庫(kù)設(shè)計(jì)者可以改變類內(nèi)部的工作方式而不用擔(dān)心會(huì)影響到客戶端程序員。
Java權(quán)限修飾符:public阴幌,private勺阐,protected卷中。這些訪問(wèn)指定詞(access specifier)決定緊跟其后被定義的東西可以被誰(shuí)使用。
public表示緊隨其后的元素對(duì)任何人都可以使用渊抽;
private表示除了類型創(chuàng)建者和類型內(nèi)部方法外的任何人都不能訪問(wèn)蟆豫,如果外部有人試圖訪問(wèn)private成員,就會(huì)在編譯時(shí)得到錯(cuò)誤懒闷;
protected關(guān)鍵字與private作用相當(dāng)十减,差別僅在于繼承的類可以訪問(wèn)protected成員,但是不能訪問(wèn)private成員毛雇;
Java中還有一種默認(rèn)的訪問(wèn)權(quán)限default嫉称,當(dāng)沒寫前三個(gè)修飾符的時(shí)候,默認(rèn)就是這個(gè)灵疮。也被稱為包訪問(wèn)權(quán)限织阅,類可以訪問(wèn)在一個(gè)包中的其他類成員,但是包外的不行震捣。
1.5 復(fù)用具體實(shí)現(xiàn)
最簡(jiǎn)單的復(fù)用某個(gè)類的方式就是直接使用該類的對(duì)象荔棉;
也可以將那個(gè)類的一個(gè)對(duì)象置于某個(gè)新的類中。新的類可以由任意數(shù)量蒿赢、任意類型的其他對(duì)象以任何可以實(shí)現(xiàn)新的類中想要的功能的方式所組成润樱,即使用現(xiàn)有的類合成新的類,所以稱為組合羡棵。
1.6 繼承
在創(chuàng)建一個(gè)類之后壹若,即使另外一個(gè)類與其具有相似的功能,還是需要重新創(chuàng)建一個(gè)新的類皂冰,效率太低店展。
繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能秃流,也可以用父類的功能赂蕴,但不能選擇性地繼承父類。
實(shí)際上繼承者(稱為導(dǎo)出類舶胀、繼承類或子類)是被繼承者(稱為源類概说、基類、超類或父類)的特殊化嚣伐,它除了擁有被繼承者的特性外糖赔,還擁有自己獨(dú)有得特性。
【注意】
子類擁有父類非private的屬性和方法纤控。
子類可以擁有自己屬性和方法挂捻,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
子類可以用自己的方式實(shí)現(xiàn)父類的方法船万。
有兩種方法可以使父類和子類產(chǎn)生差異:1.直接在子類中添加新的方法刻撒;2.覆蓋(重寫)父類的方法。
1.7 伴隨多態(tài)的可互換對(duì)象
在處理類型的層次結(jié)構(gòu)時(shí)耿导,經(jīng)常想把一個(gè)對(duì)象不當(dāng)作它所屬的特定類型來(lái)對(duì)待声怔,而是將其當(dāng)作其基類的對(duì)象來(lái)對(duì)待。這使得人們可以編寫出不依賴于特定類型的代碼舱呻。
通過(guò)導(dǎo)出新的子類類型而輕松擴(kuò)展設(shè)計(jì)的能力是對(duì)改動(dòng)進(jìn)行封裝的基本方式之一醋火。
在Java中動(dòng)態(tài)綁定是默認(rèn)的,不需要添加額外的關(guān)鍵字來(lái)實(shí)現(xiàn)多態(tài)箱吕。
1.8 單根繼承結(jié)構(gòu)
在Java中所有的類都是繼承自單一的類:Object
在單根繼承結(jié)構(gòu)中的所有對(duì)象都具有一個(gè)共有接口芥驳,所以他們歸根結(jié)底都是相同的基本類型;
單繼承結(jié)構(gòu)保證了所有對(duì)象都具有某些功能茬高;
單繼承結(jié)構(gòu)使垃圾回收變得容易很多兆旬。
1.9 容器
對(duì)容器需要選擇的原因:1.不同的容器具有不同的功能;2.不同容器處理問(wèn)題的效率不同怎栽。
參數(shù)化類型就是一個(gè)編譯器可以自動(dòng)定制作用于特定類型上的類丽猬。
ArrayList shapes = new ArrayList();
1.10 對(duì)象的創(chuàng)建和生命周期
1.對(duì)象創(chuàng)建的方法:
1)將對(duì)象置于堆棧中(他們有時(shí)被稱為自動(dòng)變量)或限域變量或靜態(tài)存儲(chǔ)區(qū)域內(nèi)來(lái)實(shí)現(xiàn)。這種方式將存儲(chǔ)空間分配和釋放置于優(yōu)先考慮的位置熏瞄,某些情況下這樣控制有價(jià)值脚祟,但是也犧牲了靈活性,因?yàn)楸仨氃诰帉懗绦驎r(shí)知道對(duì)象確切的數(shù)量强饮、生命周期和類型由桌。
2)在堆的內(nèi)存池中動(dòng)態(tài)得創(chuàng)建對(duì)象。在這種方式中邮丰,直到運(yùn)行時(shí)候才知道需要多少對(duì)象行您,他們的生命周期如何,以及他們的具體類型是什么柠座。這些問(wèn)題的答案只有在程序運(yùn)行時(shí)相關(guān)代碼被執(zhí)行的那一刻才知道邑雅。若需要?jiǎng)?chuàng)建一個(gè)對(duì)象,可以在需要的時(shí)刻直接在堆中創(chuàng)建妈经。Java完全采用動(dòng)態(tài)內(nèi)存分配方式淮野。每當(dāng)要?jiǎng)?chuàng)建新的對(duì)象時(shí),用new關(guān)鍵字來(lái)構(gòu)建此對(duì)象的實(shí)例吹泡。
2.對(duì)象的生命周期:
對(duì)于允許在堆棧上創(chuàng)建對(duì)象的語(yǔ)言骤星,編譯器可以知道對(duì)象存活的時(shí)間,并可以自動(dòng)銷毀爆哑。若在堆上創(chuàng)建對(duì)象洞难,編譯器完全不知道對(duì)象的生命周期,這樣可能會(huì)導(dǎo)致內(nèi)存泄漏揭朝。Java提供了垃圾回收機(jī)制队贱,它可以自動(dòng)發(fā)現(xiàn)對(duì)象何時(shí)不再被使用色冀,并且銷毀它。這一點(diǎn)同所有對(duì)象都是繼承自單根基類Object以及只能以一種方式創(chuàng)建對(duì)象(在堆上創(chuàng)建)這兩個(gè)特性結(jié)合起來(lái)柱嫌。垃圾回收器減少了所必須考慮的議題和必須編寫的代碼锋恬。
1.11 異常處理:處理錯(cuò)誤
異常是一種對(duì)象,它從出錯(cuò)地點(diǎn)被“拋出”编丘,并被專門設(shè)計(jì)用來(lái)處理特定類型錯(cuò)誤的異常處理器“捕獲”与学。異常處理就像是與程序正常執(zhí)行路徑并行的、在錯(cuò)誤發(fā)生時(shí)執(zhí)行的另一條路徑嘉抓。異常不能被忽略索守,所以它保證一定會(huì)在某處得到處理。
異常提供了一種從錯(cuò)誤狀況進(jìn)行可靠恢復(fù)的途徑抑片。
1.12 并發(fā)編程
最主要的問(wèn)題是共享資源:某個(gè)任務(wù)鎖定某項(xiàng)資源卵佛,完成任務(wù),釋放資源鎖蓝丙,其他的任務(wù)可以使用這項(xiàng)資源级遭。
1.13 Java和Internet
現(xiàn)在主要應(yīng)用于B/S編程。
需要知道http和https的區(qū)別渺尘;在瀏覽器上輸入一個(gè)地址后的運(yùn)行過(guò)程挫鸽。