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

2018.10.6學習筆記

10.6學習筆記

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


《Java程式設計思想》部分:
1.預設構造器:
如果你寫的類中沒有構造器,則編譯器會自動幫你建立一個預設的構造器。但是,如果你已經定義了一個構造器(無論是否有引數),編譯器就不會幫你自動建立預設構造器

2.this關鍵字:
①this關鍵字通常表示的是對當前物件的引用
②Java在構造方法中,語句this(引數列表)應在任何可執行語句之前出現無引數或引數少的構造方法可以用this呼叫引數多的構造方法

3.垃圾回收:
①Java有垃圾回收器負責回收無用物件所佔的記憶體資源

,但是有種特殊情況:你的物件並非通過new建立而是獲得一塊“特殊”的記憶體區域。因為垃圾回收器只知道釋放那些由new建立的物件,所以它不知道該如何釋放該物件的這塊“特殊”記憶體,為了應對這種情況,Java允許在類中定義一個名為finalize()方法
②finalize()是Object中的方法,當垃圾回收器將要回收物件所佔用的記憶體之前被呼叫,即當一個物件被虛擬機器宣告死亡時會呼叫它的finalize()方法,讓次物件可以處理它生前的最後事情,並且在下一次垃圾回收動作發生時刻,才會真正回收物件所佔的記憶體
如果Java虛擬機器並未面臨記憶體耗盡的情形,他是不會浪費時間去執行垃圾回收以恢復記憶體的,因為垃圾回收本身也有開銷,如果不去使用它,那麼就不用支付這方面的開銷。

垃圾回收器對於提高物件的建立速度,卻具有明顯的效果儲存空間的釋放竟然會影響儲存空間的分配

4.初始化:
①變數的初始化發生在任何的方法(包括構造方法)被呼叫之前無論變數在何處被宣告,在方法下面或者構造方法下面也好。
②靜態變數只有在必要時刻才會進行初始化(建立對應的物件,此物件需要呼叫靜態變數),此後,靜態變數不會再次被初始化,即靜態變數只會初始化一次(非靜態變數在每次建立物件時候都會進行初始化)。
③初始化的順序是先靜態再非靜態
構造方法實際上也是靜態方法


《大話設計模式》部分:
裝飾模式:
①定義:動態的給一個物件增加一些額外的職責。就擴充套件功能而言,裝飾模式提供了一種比使用子類更加靈活的替代方案。
②透明裝飾模式與半透明裝飾模式:
透明裝飾模式

要求將物件宣告為抽象型別,即Component。而不應該宣告為具體構件型別或具體裝飾型別。
半透明裝飾模式也就是對具體構件型別是透明的,但是對具體裝飾型別必須指定,是不透明的。即Component component是透明的,ComponentDecorator componentDecorator是不透明的,必須指定具體裝飾型別。
③裝飾模式的優缺點:
優點:可以對一個物件進行多次裝飾比繼承更加靈活不會導致子類的個數急劇增加(這點比較重要);
缺點:大量小的物件的產生會佔用更多的系統資源在一定程度上影響程式的效能
④裝飾模式適用環境:
不能採用繼承的方式對系統進行擴充套件或者採用繼承不利於系統的擴充套件和維護時可以採用裝飾模式(例如會導致子類個數的急劇增加)。