第一章 筆記
引言
- 《java編程思想》的初衷是面向自學人員的往核,如果你不會c/c++語言也不用的擔心箫爷。
- 書本的章節(jié)由作者精心安排,每章節(jié)都有重點聂儒,而且有練習的間隔時間,能給讀者提供扎實的基礎硫痰。
章節(jié)設計
- 對象對門 對象的概念
- 一切皆對象 java是怎么去表達對象的衩婚,說人話就是用代碼怎么去寫對象
- 控制程序流程 主要是三大結構,每種語言都有效斑,不同的是java有標簽式break和contiune非春,其實 go也有這個
- 初始化和清除 主要是java中的構造函數(shù)和垃圾回收器,說理論點就是 對內存的分配和釋放,特別是垃圾回收算法可以去深入了解
- 隱藏實現(xiàn)過程 自我理解--封裝性
- 類再生 類的繼承性 可以很好的服用代碼等優(yōu)點
- 多形性 多態(tài)性奇昙,护侮,類似go中有種duck-typing的編程思想
- 對象的容納 java的集合框架,說人話就是java自帶的封裝好的數(shù)據(jù)結構 一般都是 stack queue hashtable hashmap 之類的
- 違例差錯控制 java的異常處理機制储耐。
- java IO系統(tǒng) io是計算機內存和外設的數(shù)據(jù)流動 網(wǎng)絡IO這是一種特殊的IO java里面的IO則是以流的方式來處理羊初,關于流理解的不是很深刻,則需要后續(xù)多理解理解什湘。
- 運行期類型鑒定 也就是java的反射機制长赞,還需要后續(xù)的深入理解
- 傳遞和返回對象 主要涉及句柄的知識
- javaGUI 不重要
- 多線程 深入理解多線程,學會java對多線程的表達闽撤,清楚IO密集型 計算密集型 合理運用多線程
- 網(wǎng)絡編程 也就是socket編程得哆, java從BIO-》NIO-》AIO-》netty
- 涉及范式 書上說的是舉一個例子然后對方案不對的改革,體會到使設計思路變得清晰起來的一種途徑哟旗, 我可能會理解成設計模式
- 項目 對前面知識的應用和擴展
第一章 閱讀總結 -- 對象入門
1.1 抽象的進步
優(yōu)點:對管理人員贩据,更快和更廉價的開發(fā)和維護過程,對建模處理變得更加簡單闸餐,能生成更加簡單饱亮、易于維護的的設計方案。 缺點:學習成本高绎巨,設計出優(yōu)秀的重復性使用的類是具有挑戰(zhàn)性的近尚,對初入門面對對象編程的人員是一個痛苦的選擇。
第一章作者會來后面來證明面對對象是多么的簡單场勤。從思想上解釋面對對象程序設計戈锻。
匯編是對計算機本體,計算機組織結構的抽象和媳。 BASIC和C等是對匯編的更加抽象格遭,但是并沒有屏蔽掉開發(fā)人員對計算機組成原理的認識, java在這基礎上(c等低級語言)的抽象留瞳,我覺得也可以理解成封裝拒迅,把復雜的東西封裝起來,給開發(fā)人員調用就行了她倘,不需要他們k 4. 每個對象都擁有其類型 5. 某一特定類型的所有對象都可以接受同樣的消息璧微。
1.2 每個對象都有一個接口
面向對象語言,實際上是創(chuàng)建新的數(shù)據(jù)類型硬梁,-- 可以對應到C的結構體前硫。 類描述了相同特性和行為的對象集合,所以類實際上就是一個數(shù)據(jù)類型荧止,我以前最開始再理解C的結構體的時候就是把結構體理解成一種開發(fā)者自定義的數(shù)據(jù)類型屹电。
向某個對象發(fā)送消息就是調用某個對象的方法阶剑,
UML的設計
1.3 每個對象都提供服務
試圖開發(fā)或者理解程序設計師,最好的方法之一就是將對象想象為“服務提供者”危号。
代碼是的設計可以先從程序提供了什么服務開始思考牧愁,設計程序應該有什么類,不同的類分別提供了什么服務等外莲。猪半。。這樣還能簡化別人使用你的代碼的學習成本
1.4 被隱藏的具體實現(xiàn)
用一些權限修飾符苍狰,限制某些成員的權限办龄,權限不能給的太大,也不能給的太小淋昭。public private protected (還有一種默認的權限) public 》 protected》(default)》private
1.5 復用具體實現(xiàn)
一個被設計完并測試完的類是可以復用的俐填,代碼復用是java中提供的一個了不起的優(yōu)點之一。 最簡單的使用就是:實例化某個提供的類翔忽,也可以說成是創(chuàng)建一個對象(組合)英融,其次是可以 繼承類和實現(xiàn)接口
1.6 繼承
繼承應該是復用代碼最常用的方式了,我們不但可以繼承父類已有的數(shù)據(jù)和方法歇式,還可以增加和修改父類的方法驶悟,但是同時也有弊端,如果你修改了基類(也可以稱作父類材失,超類)痕鳍,就可以影響被繼承的類。
垃圾回收的例子 -- 以垃圾為基類 幾何圖形的例子 --
導出類繼承了基類后龙巨,不但復制了基類的數(shù)據(jù)和方法笼呆,更重要的是復制了基類的接口(這里的接口指的是對象的方法),同時可以發(fā)送給基類對象的消息也可以發(fā)送給導出類 一個圓同時也是一個幾何圖形旨别,同時體現(xiàn)了 多態(tài)性
1.6.1 “是一個” 與 “像是一個” 關系
舉例 圓是繼承于幾何圖形的诗赌,我們就可以說:一個圓就是一個幾何圖形。判斷繼承就要用:is-a來描述類之間的關系秸弛。 一般我們在新的導出類中添加了新的接口铭若,也就是拓展了接口,我們就可以這樣來描述基類和導出類的關系:is-like-a递览,舉例叼屠,如果你家的空調(為了制冷)壞了,你去買一個熱力泵替換他(熱力泵既可以制冷也可以制熱)绞铃,這時候我們就可以說:空調 is-like-a 熱力泵
1.7 伴隨多態(tài)的可互換對象
闡述我對前期綁定(編譯階段決定)环鲤,和后期綁定(運行階段決定)的理解 (重點闡述) 因為java本身自動支持了后期綁定(在運行階段確定),所以天然支持多態(tài)
上轉型和下轉型
1.8 單繼承結構
所有的類都是繼承于 Object 類憎兽,單繼承結構是有一定的好處的(代碼兼容性) 單繼承也使得垃圾回收變得更加容易冷离,-- 可以拓展出去,理解下堆內存和棧內存纯命,和棧數(shù)據(jù)結構西剥。(堆,棧亿汞,堆棧)
1.9 容器
說得比較抽象一點可以稱作“容器”瞭空,再具體一點可以叫做數(shù)組或者鏈表,再具體一點就是 一片內存空間 比如在CPP中就是 STL疗我,java中也有很多滿足不同需求的容器咆畏,比如:List,Map吴裤,Set,其實本質上就是對數(shù)據(jù)結構中常用結構的封裝旧找,或者叫實現(xiàn)。
java中有各種各樣的容器麦牺,需要我們針對不同的需求和場景選擇不同的容器
1.9.1 參數(shù)化類型
泛型--在容器中如果不適用泛型钮蛛,就會有向上轉型和向下轉型, 在java中所有的類都繼承于 Object 類剖膳,golang中魏颓,所有的結構體都實現(xiàn)了 interface{} 空結構體,這是比較相似的吱晒。 但是為什么go不提供泛型呢甸饱?可以思考
1.10 對象的創(chuàng)建和生命周期
對于自帶垃圾回收的語言,一個好的垃圾回收機制對程序的執(zhí)行效率來說是非常重要的仑濒, 棧上的內存效率遠高于堆上的內存叹话,
1.11 異常處理,處理錯誤
大多數(shù)錯誤處理的機制的主要問題在于躏精,他們都依賴于程序員的自我警惕性渣刷,可以對比go和java的異常處理 異常處理不是面向對象的特征,在面向對象出來之前就已經(jīng)存在了矗烛。
java中本身就內置了異常處理辅柴,并強制要求使用,不然編譯器就會報錯瞭吃。
1.12 并發(fā)編程
在java中的并發(fā)編程往往都是通過多線程來解決碌嘀,在go中往往都是通過多協(xié)程來解決。 隨之而來的就是對臨界資源的競爭問題歪架,然后就會談到鎖股冗。
1.13 Java與Internet
java Web的發(fā)展歷史,看看就行了
1.14 總結
雖然初學OOP可能比較惱火和蚪,但是對于一個設計良好的程序中止状,面對對象的代碼量會更少烹棉,理解起來也更容易。