總覺得書中太啰嗦,看完總結後方便日後回憶,本想偷懶網上找別人的總結,無奈找不到好的,只好自食其力,儘量總結得最好。 第一章 對象導論 看到對象導論覺得這本書 目錄: 1.1 抽象過程1.2 每個對象都有一個介面1.3 每個對象都提供服務1.4 被隱藏的具體實現1.5 復用具體實現1.6 繼承1.7 ...
總覺得書中太啰嗦,看完總結後方便日後回憶,本想偷懶網上找別人的總結,無奈找不到好的,只好自食其力,儘量總結得最好。
第一章 對象導論
看到對象導論覺得這本書
目錄:
1.1 抽象過程
1.2 每個對象都有一個介面
1.3 每個對象都提供服務
1.4 被隱藏的具體實現
1.5 復用具體實現
1.6 繼承
1.7 伴隨多態的可互換對象
1.8 單根繼承結構
1.9 容器
1.10 對象的創建和生命期
1.11 異常處理:處理錯誤
1.12 併發編程
1.13 Java與Internet
1.14 總結
覺得看完終於要精通Java了,然而本章只是介紹開發方法概述在內的OOP的基本概念,瞭解對象的重要性。
1.1 抽象過程
通過其他語言的缺點來說明面向對象語言的好。
彙編語言是對底層機器的輕微抽象、命令式語言(如C、BASIC)是對彙編語言的一種抽象,彙編語言直接控制電腦的硬體,命令式語言則基於電腦結構解決問題。OOP語言基於問題的結構解決問題,不會受限於任何特定類型的問題。
1.2 每個對象都有一個介面
介面:確定了對某一特定對象所能發出的請求 對象:類型名稱
看文字描述已經上升到哲學問題,從下麵例子很好理解。
Light lt = new Light(); //對象
lt.on;//介面向對象發出請求
1.3 每個對象都提供服務
好處:1、有助於提高軟體的內聚性 2、每個對象都可以很好的完成一項任務,但是它並不試圖做更多的事情。
理解:設計一個音樂播放器,有歌詞顯示、播放,暫停、背景顯示(服務),這時不要只提供一個對象(它並不試圖做更多的事情),可以提供三個對象,完成三個服務,三個對象提供三個服務完成一個音樂播放器(內聚性)。
1.4 被隱藏的具體實現
從Github下載一個框架,我的目標是實現快速應用開發,框架只需向我提供方法的調用即可,其他的隱藏了也不會影響我的調用。
訪問許可權:public > protected(包+基類) > 包訪問許可權(沒有關鍵詞時預設) > private
1.5 復用具體實現
復用指在一個類中使用繼承或者組合。
- 繼承 ----is a 的關係 荔枝是水果
- 組合 ----has a 的關係 有一種睡覺的方式是趴著
1.6 繼承
從父類中派生出子類,子類能吸收父類的數據屬性和行為,並能擴展新的能力。
1.7 伴隨多態的可互換對象
class Shape{
draw();
erase();
move();
getColor();
setColor();
}
void doSomething(Shape shape){
shape.erase();
//...
shape.draw();
}
Circle circle = new Circle(); //父類為Shape
Triangle triangle = new Triangle(); //父類為Shape
Line line = new Triangle(); //父類為Shape
doSomething(circle);
doSomething(triangle);
doSomething(line);
對doSomething的調用會自動地正確處理,而不管對象的確切類型(可互換對象)。
doSomething(Shape shape)的執行是指你是Shape類或者父類為Shape,而不是你是Circle類就執行這樣,你是Triangle 類就執行那樣。理解了可以去看設計模式之策略模式。
這裡還涉及到向上轉型,如下圖:
1.8 單根繼承結構
1、所有類都繼承自單一的基類
public class JianCheng extends Object {
}
public class JianCheng { public static void main(String[] args) { JianCheng jiancheng= new JianCheng(); System.out.println(JianCheng instanceof Object); } }
輸出:true //說明 JianCheng 類預設繼承 Object
2、保證所有對象具有某些功能
Object 的方法會被子類所繼承,例如: clone()、equals(Object obj)、toString() 等方法。
3、垃圾回收變得容易
對象保證有其(Object)類型信息,因此不會因無法確定對象的類型而陷入僵局。這對於系統級操作顯得十分重要(如異常處理)。
1.9 容器
持有對其他對象的引用稱為容器(集合),例如List(用於存儲序列),Map(也被稱為關聯數組,用來建立對象之間的關聯),Set(每種對象類型只持有一個),以及諸如隊列、樹、堆棧等更多的構件。
ArrayList與LinkedList的比較,前者是數組的形狀,隨機訪問元素開銷小,但插入、刪除操作開銷大。後者是鏈表形狀,插入、刪除操作方便。
1.10 對象的創建和生命期
認識對象置於堆棧和堆的區別
- 堆棧 --間分配和釋放置於優先考慮的位置,犧牲了靈活性,因為必須知道對象確切的數量、生命周期和類型。
- 堆 --記憶體池中動態的創建對象,運行時才知道對象的數量,生命周期和類型。動態管理所以需要大量的時間在堆中分配存儲空間,但創建存儲空間和釋放存儲空間非常方便。
Java 採用了動態記憶體分配的方式,使用 new 關鍵字創建對象,編譯器可以確定對象存活的時間,並通過“垃圾回收器機制”自動銷毀它。
1.11 異常處理:處理錯誤
異常是一種對象,從出錯地點被拋出,並被特定類型的錯誤異常處理器捕獲,通過try--catch或者throw。異常處理就像是與程式正常執行路徑並行的、在錯誤發生時執行的另一條路徑。
Java代碼重沒有編寫正確的處理異常的代碼,那麼就會得到一條編譯時的出錯消息。例如:IOException,ClassCastException(類轉換異常),NullPointerException(空指針異常)等。
1.12 併發編程
同一時刻處理多個任務的思想,也就是多線程運行。
同步多線程運行有一個隱患,共用資源。A本來想使用a=Love You 但在某個線程導致a = hate you 然後A使用了,這樣A肯定告白失敗。
1.14 總結
第一章全是理論知識,而且很多知識點明明很容易卻長篇大論導致難以理解,乾貨有卻夾雜太多虛的了。
轉載註明:http://www.cnblogs.com/wujiancheng/