《java編程思想》學習筆記—對象導論

1.1抽象過程

一、人們所能解決的問題的複雜性直接取決於抽象的類型和質量。java

二、對象具備狀態,行爲和標識。這意味着每個對象均可以擁有內部數據(它們給出了該對象的狀態)和方法(它們產生行爲),而且每個對象均可以惟一地與其餘對象區分開來,具體來講,就是每個對象在內存中都有一個惟一地地址。程序員

1.2每一個對象都有一個接口

一、面向對象程序設計的挑戰之一,就是問題空間的元素和解空間的對象之間建立一對一的映射。編程

二、每一個對象都只能知足某些請求,這些請求由對象的接口所定義,決定接口的即是類型。安全

三、接口肯定了對某一特定對象所能發出的請求,可是,在程序中必須有知足這些請求的代碼,這些代碼與隱藏的數據一塊兒構成了實現。併發

四、在類型中,每個可能的請求都有一個方法與之相關聯,當向對象發送請求時,與之向關聯的對象就會被調用。.net

五、UML,每一個類都用一個方框標識,類名在方框的頂部,任何數據成員都描述在方框的中間部分,法法在方框的底部。設計

參考博客:https://my.oschina.net/fuyong/blog/717505指針

1.3每一個對象都提供服務

程序自己想用戶提供服務,它將經過調用其餘對象提供的服務來實現這一目的。對象

在良好的面向對象設計中,每一個對象均可以很好的完成一項任務,但它並不試圖作更多的事。blog

1.4被隱藏的具體實現

一、訪問控制的第一個存在緣由就是讓客戶端程序員沒法觸及他們不該該觸及的部分。

二、訪問控制的第二個存在緣由就是容許庫設計者能夠改變類內部的工做方式而不用擔憂會影響到客戶端程序員。

3java用三個關鍵字在類的內部設定邊界:

public:任何人均可訪問

private:建立者和類型的內部方法可訪問

protected:建立者,類型的內部類方法,以及繼承的類能夠訪問,可是不能訪問private成員。

沒有任何限定詞時:包內能夠訪問

1.5複用具體實現

一、最簡單地複用某個類的方式就是直接使用該類的一個對象,此外也能夠將那個類的一個對象置於某個新的類中。

二、使用現有的類合成新的類,這種概念被稱爲組合,若是組合是動態發生的,那麼它統稱被稱爲聚合。

三、新類的成員對象一般都被聲明爲private,使得使用新類的客戶端程序員不能訪問它們。

四、理解組合和聚合的區別:

(1)組合視爲has-a(擁有)關係:例如公司由多個部門組成,公司不存在了,部門也就不存在了

(2)聚合:例如一個部門由多個員工組成,如部門不撤銷了,人不會消失

1.6繼承

一、有兩種方法可使基類和導出類產生差別:

(1)一種方法很是直接:直接在導出類中添加新方法。

(2)改變現有基類的方法的行爲,這被稱之爲覆蓋。

二、繼承會繼承父類的全部成員,包括private成員

三、「是一個」與「像是一個」關係

是一個:用一個導出類對象來徹底代替一個基類對象(稱之替代原則);

像是一個:擴展接口,即再處處類型中添加新的接口元素。這個新的類型仍然能夠替代基類,但這種替代並不完美,由於基類沒法訪問新添加的方法。

1.7伴隨多臺的可互換對象

調用基類的方法,怎麼知道具體的子類方法? 後期綁定:爲了執行後期綁定,Java使用一小段特殊的代碼來替代絕對地址調用。這段代碼使用再對象中存儲的信息來計算方法體的地址。這樣根據這一小段代碼的內容,每個對象均可以具備不一樣的表現行爲。當向對象發送消息時,該對象就知道可以知道這條消息應該作些什麼。

1.8單根繼承機構

java全部的類最終都繼承單一的基類,即Object

1.9容器

一、爲何要使用容器?

因爲不知道解決某個特定問題時須要多少個對象,或者他們講存活多久,因此建立另外一種對象型類型,這種新的對象類型持有對其餘兌現的引用,在任何須要時均可以擴充本身以容納你置於其中的全部東西。

二、爲何容器有多種類型?

(1)不一樣容器提供了不一樣類型的接口和外部行爲。

(2)不一樣的容器對於某些操做具備不一樣的效率

三、參數化類型(泛型) (1)單根繼承意味着全部東西都是object類型,因此能夠存儲object的容器能夠存儲任何東西。

(2)存儲object,因此當將對象引用置入容器時,它被向上轉型爲object,所以它會丟失其身份。當把它取

回時,就獲取了一個對object對象的引用,而不是對置入時的那個類型的對象的引用。怎樣才能將它變回先

前置入容器時的具備實用接口的對象呢?

一種方法是向下轉型(不安全)

另外一種方式即是實用泛型,泛型是一個編譯器能夠自動定製做用於特定類型上的類。例如,經過使用泛型,

編譯器能夠定製一個只接納和取出shape對象的容器。

關於基類怎麼調用子類的方法,可參考以下博客:

http://www.javashuo.com/article/p-mjyvwovq-hk.html

1.10對象的建立和生命期

一、C++建立對象在堆棧或靜態區域。

二、java是在堆的內存池中動態的建立對象。

三、在堆棧中建立存儲空間和釋放存儲空間一般須要一條彙編指令便可,分別對應將棧頂指針向下移動和將

棧頂指針向上移動。建立對存儲空間的時間以來於存儲機制的設計。

四、對於容許在堆棧上建立對象的語言,編譯器能夠肯定對象存活的時間,並能夠自動銷燬它。然而,如

果是在堆上建立對象,編譯器就會對它的生命週期一無所知。

五、java垃圾回收器被設計用來處理內存釋放問題,但不包括清理對象的其餘方面。

1.11異常處理:處理錯誤

一、異常時一種對象,它從出錯點被「拋出」,被被專門設計用來處理特定類型錯誤的應用的異常處理器「捕

獲」。

二、異常處理就想是與程序正常執行路徑並行的,在錯誤發生時執行的另外一條路徑。

三、異常不能被忽略,因此它保證必定會在某處獲得處理。

四、異常提供了一種從錯誤情況進行可靠回覆的途徑。

五、異常處理不是面向對象的特徵。

1.12併發編程

java的併發是內置於語言中的。

1.13java與Internet

相關文章
相關標籤/搜索