1. 程式人生 > >2018.10.5學習筆記

2018.10.5學習筆記

10.5學習筆記

最近在學習《Java程式設計思想》和《大話設計模式》這兩本書籍,雖然這兩本書籍都已比較古老,在技術日新月異的更新時代,有點技術已經過時,但正是由於經過時間的沉澱,才能被稱之為經典,所以我還是決定取其精華,剔其糟粕,汲取下兩本書的程式設計思想吧。

今天學習了《Java程式設計思想》的前四章以及《大話設計模式》的前五章。下面對今日學習收穫與疑惑作總結。


《Java程式設計思想》部分:

1.由於繼承在面向物件程式設計中如此重要,所以它經常被高度強調,於是程式設計師新手就會有這樣的印象:處處都應該使用繼承。實際上,在建立新類時,應該首先考慮組合(將一個類的物件作為此類的一個數據域),因為它更加的簡單靈活。
①新類的成員成員物件通常都被宣告為private,使得類的客戶端程式設計師無法訪問他們。
②你可以在不干擾現有客戶端程式碼的情況下,修改這些成員,也可以在執行時修改這些成員物件,以實現動態修改程式的行為。繼承不具備這樣的靈活性,因為編譯器必須對通過繼承而建立的類施加編譯時的限制

(編譯器施加什麼限制,如何對繼承而來的類進行編譯?在網上搜取了資料還是沒有解決,希望有緣人能夠解答一下,謝謝),

2.Java靜態方法和普通方法區別:
①static修飾的靜態方法會隨著類的定義而被分配和裝載入記憶體中,編譯器只為整個類建立了一個靜態變數的副本,也就是隻分配一個記憶體空間,雖然可能有多個例項,但這些例項共享該記憶體,因此,任何一個物件對靜態資料成員的修改,都會影響其它物件
②靜態不能引用非靜態這一特性,是由於靜態的會隨著類的定義而被分配和裝載入記憶體中這一關鍵點決定的;如果靜態引用了非靜態的,根本無法從記憶體中找到非靜態的程式碼段,勢必會出錯,這種做法是Java虛擬機器決不允許的。
③靜態方法只能訪問靜態成員,例項方法可以訪問靜態和例項成員。之所以不允許靜態方法訪問例項成員變數,是因為例項成員變數是屬於某個物件

的,而靜態方法在執行時,並不一定存在物件。同樣,因為例項方法可以訪問例項成員變數,如果允許靜態方法呼叫例項方法,將間接地允許它使用例項成員變數,所以它也不能呼叫例項方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。
子類無法重寫即覆蓋父類的靜態方法,也無法繼承父類的私有方法。只有子類中進行覆蓋的方法才會進行動態繫結,而隱藏(是針對成員變數、靜態方法、私有方法)不會進行動態繫結。

3.單根繼承結構:
在java中,所有的類最終都繼承自單一的類Object,事實證明,這種結構帶來了很多好處。
①在單繼承結構中所有物件都具有一個公用介面,所以他們歸根結底都是相同的基本型別,因此不會因無法確定物件的型別而陷入僵局。
②單根繼承系統結構保證所有的物件都具備某些基本功能

,因此可以在每個物件上執行某些基本操作。

4.Java的垃圾回收器:
垃圾回收器提供了更高層的保障,可以避免暗藏的記憶體洩露問題,其被設計用來處理記憶體釋放問題,垃圾回收器知道物件何時不再被使用,並自動釋放物件上佔用的記憶體,得益於以下兩點實現:
①單根繼承結構,所有的物件都繼承自單一的類Object,因此具有相同的基本型別。
②Java在堆上建立物件(而不同於C++的在堆疊上建立物件)。

5.資料存放於何處?
程式執行時,物件是怎麼進行放置安排的?特別是記憶體是怎麼分配的,有五個不同的地方可以儲存資料:
暫存器。這是最快的儲存區,由於數量有限,所以暫存器根據需求分配,你無法直接控制。
堆疊。位於通用RAM(隨機訪問儲存器)中,通過堆疊指標可以從處理器那裡獲得支援。建立程式時,Java系統必須知道儲存在堆疊內所有項的確切的生命週期,以便上下移動指標來分配、釋放記憶體。(C++物件一般儲存其中)。值得注意的是:Java對於基本型別,Java不用new來建立變數,而是採用和C++一樣的方法,在堆疊中建立一個並非是引用的變數,這個變數直接儲存值,因此Java要確定每種基本型別所佔儲存空間的大小。
。一種通用的記憶體池(也位於RAM中),用於存放所有的Java物件。堆不同於堆疊的好處是:編譯器不需要知道儲存的資料在堆裡存活多長時間
常量儲存。常量值通常直接存放在程式程式碼內部,可以選擇將其存放在ROM(只讀儲存器)中。加粗樣式
非RAM儲存。如果資料完全儲存於程式之外,那麼他可以不受程式的任何控制,基本的例子就是流物件可序列化

6.javadoc
javadoc用於提取程式中的/** */型別註釋,輸出的是一個HTML檔案,可以用web瀏覽器檢視。注意,javadoc只能為publicprotect成員進行文件註釋,private和包內可訪問成員的註釋會被忽略掉。

7.break和continue
break是退出迴圈,continue是退出本次迴圈。(老是容易忘,所以特地列出來)


《大話設計模式》部分:
1.簡單工廠模式:
用一個單獨的類去例項化物件

2.策略模式:
將演算法分別封裝起來,讓他們之間可以互相替換,策略模式可以理解成老司機開車,今天想開路虎,明天想開寶馬。。。就可以將每天開什麼車封裝起來,根據日期相互替換。

3.單一職責原則:
就一個類而言,應該僅有一個引起它變化的原因。

4.開放-封閉原則:
軟體實體(類、函式)對於拓展是開放的,對於修改是封閉的。

5.依賴倒轉原則:
抽象不應該依賴細節,細節應該依賴於抽象。要針對介面程式設計,不要對實現程式設計。不管是高層還是低層模組他們應該都依賴於抽象,具體一點就是介面或者抽象類(易於維護和拓展),只要介面是穩定的,那麼任何一個的更改都不用擔心受到影響。