java編程原理
- 問題空間: 問題存在的地方,即業務內容。
- 解空間:解決方法,例如用計算機編程建模。
- 面向對象不會限於某種特定問題,咱們將問題空間中的元素及其解空間中表示爲「對象」。
- 面向對象思想的實質是:程序能夠經過添加新的對象使自身適應於某個特定問題。
- 當閱讀解決方案的代碼的同時也是在閱讀問題的表述。
- OOP根據問題來描述問題,區別於面向過程。它的每個對象像一臺小計算機,擁有狀態與操做,至關於現實世界中對象的特徵與行爲。
- OOP的設計方式:
- 萬物皆對象:對象爲一個奇特變量,能夠存儲數據,能夠在自身上執行操做,理論上講,能夠抽取待解決問題的概念化構件將其表示爲程序中的對象。
- 程序是對象的集合,它們經過發送消息來告知彼此所要作的。消息能夠理解爲對特定對象方法的調用。
- 每一個對象都由其餘對象來構成。能夠將複雜性隱藏在簡單性背後。
- 全部的對象都有其類型。以區別不一樣的類。
- 特定類型的全部對象都能接受相同的消息。繼承特性,強大的封裝能力。是一種可替代性。
- 每一個對象都提供「服務」,當理解一個程序時最好獎對象想象成「服務提供者」。自己提供服務,並調於其餘對象來提供服務。編程就是創造一系列對象來解決要解決的問題。更像是一種對問題的現實仿真。
- 類建立者與類使用者。建立者暴雷必要的方法,隱藏細節實現。類使用者使用時就不會無心間弄出庫的bug。封裝出一個邊界是很重要的。使得使用者沒法修改建立者。
- 設計新類時應該首先考慮組合,而後纔是繼承與內聚(動態)形式。
- 繼承與實現的類型等價性是一個重要理解。
- 多態的向上轉型(安全)與向下轉型(危險)。參數化類型即泛型就是爲了解決向下轉型的危險性。
- 容器類:list(存儲序列),map(關係數組,創建對象之間的關聯),set(每種對象只存儲一個),隊列,樹,堆棧(自動變量、限域變量)。容器的不一樣在於使用接口的不一樣以及操做時效率不一樣。容器接口與底層實現類的不一樣。
- c++將對象放於堆棧或者靜態區域,這樣執行速度優先於一切,缺乏了靈活性。java將對象存儲在堆 (heap)中,是一種動態內存分配的機制。在大量對象的狀況下,查找與銷燬的時間不會對建立對象產生重大沖擊。
- java垃圾回收依賴於單根繼承與只能在堆上建立對象的約束。
- 程序中各自獨立運行的部分稱爲線程,概念上也稱做‘併發’。、
- 在OOP中,編程只是建立表示問題空間概念的對象,以及組這結對象發送空間內行爲的消息。
- 深入理解對象引用與對象自己(搖控器與電視機能夠單獨存在與關聯)。
- java中數據存儲的地方:寄存器(處理器內部,數量有限,無感知)、堆棧(RAM中,存在對象引用,速度快,指針下上移動可分配與釋放內存,編譯器知道對象生命週期)、堆(RAM通用內存池,new建立時間長,不知道對象存活時長,靈活建立)、常量存儲(代碼內部)、非RAM存儲(流對象=>網絡字節流,持久化對象=>文件磁盤)。
- 基本數據類型:非引用的數據類型,與C++同樣在堆棧中固定長度存儲,
- 引用具備做用域限制而對象沒有限制,只不過引用超出做用域後再也沒法訪問這個對象了。垃圾回收會自動釋放這些對象佔用的內存空間。
歡迎關注本站公眾號,獲取更多信息