第一講 面向對象概念java
一、 定義設計模式
相對於與面向過程而言的,將功能封裝進對象,咱們只關心具有了該功能的對象,而不用關注對象的具體細節。數組
面向對象的特色:使複雜問題簡單化。咱們只關心什麼對象能處理什麼事情,而不用關心具體的實現細節。安全
二、 面向對象特徵jvm
封裝、繼承、多態。函數
第二講 類和對象的關係this
一、 概述設計
類就是:對現實生活中事物的描述,能夠是實體的事物也能夠是一件事等;3d
對象是:是某類事物的實例,實實在在存在的個體;對象
映射到java中,描述就是class定義的類。
具體對象就是對應java在堆內存中用new建立的實體。
二、 舉例描述類和對象關係
如圖中表示:圖紙就是用於描述汽車的,而實際的汽車就是一個汽車實體。
圖紙描述的內容有:汽車的屬性(顏色、長度、寬度等),還描述了汽車的行爲(開燈、啓動等)。
第三講 封裝
一、 定義
封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,能夠利用public和private來實現封裝。
好處:將變化隔離,便於使用,提升重用性,提升安全性
封裝原則:將不須要對外提供的內容都隱藏起來;把屬性都隱藏,提供公共方法對其訪問。
二、 封裝實例
代碼中的age和name已經被封裝在Person類中。
對外提供訪問私有成員方式的緣由是:能夠在訪問方式中加入邏輯判斷等語句,對訪問的數據進行操做,提升代碼健壯性。
第四講 構造函數&構造代碼塊
一、 特色
1) 函數名是固定的,與類型相同;
2) 不用定義返回值類型,與void不一樣;
3) 不能夠寫return語句;
二、 構造函數應用
1) 對象一創建就會調用與之對應的構造函數;能夠用於給對象進行初始化。
2) 當一個類中沒有定義構造函數時,那麼系統會默認給該類加入一個空參數的構造函數,方便該類進行初始化。
3) 當在類中自定義了構造函數後,默認的構造函數就沒有了。
應用實例:能夠定義多個構造函數,由於不一樣的實例對象初始化方式可能不一樣。
三、 構造函數與通常函數的區別
1) 構造函數是在對象一創建就執行,給對象初始化;
2) 通常函數是被對象調用時才執行,給對象添加對象具有的功能;
3) 一個對象創建,構造函數只運行一次,而通常方法能夠被對對象屢次調用;
四、 判斷什麼時候定義構造函數
當分析事物時,該事物存在具有一些特性或者行爲,那麼將這些內容定義在構造函數中
五、 構造代碼塊
做用:給對象進行初始化。對象已創建就運行,並且優先於構造函數執行。
和構造函數的區別:構造代碼塊是給全部對象進行統一初始化,而構造函數是給對應的對象初始化。
第五講 this關鍵字
一、 This關鍵字
This表明的是:本類的對象,表明它所在函數所屬對象的引用,即,那個對象在調用this所在的函數,this就表明哪一個對象。
應用:
1) 用於區分局部變量和成員變量同名狀況,以下:
2) 當定義類中功能時,該函數內部要用到調用該函數的對象時,這時用this來表示這個對象。
二、 This在構造函數互調中的應用
用於構造函數之間進行互相調用。
注意:語句只能定義在構造函數的第一行,由於初始化要先與執行(當調用一個構造函數時,函數體內的this()就至關於初始化)
第六講 static關鍵字
一、 static做用
用於修飾成員(成員變量、成員函數)。
被static修飾的內容將被對象所共享,內存中將該內容和對象分開存儲。
二、 特色
1) 隨着類的加載而加載,隨着類的消失而消失,生命週期最長;
2) 優先於對象而存在,靜態是先存在,對象是後存在;
3) 被全部對象所共享;
4) 能夠直接被類類型所調用
三、 實例變量和類變量(被static修飾的成員變量)的區別
1) 內存中的位置
l 類變量隨着類的加載而存在於方法區(共享區/數據區)中;
l 實例變量隨着對象的創建而存在於堆內存中;
2) 生命週期
l 類變量生命週期最長,隨着類的加載而加載,隨着類的消失而消失;
l 實例變量生命週期隨着對象的加載而加載,隨着對象的消失而消失;
四、 靜態使用注意事項
1) 靜態方法只能訪問靜態成員
由於靜態方法隨着類的加載而加載,但非靜態成員依賴於實例對象的建立而產生,靜態方法和非靜態成員的生命週期不一樣,在調用時會出現錯誤,所以靜態方法不能調用非靜態成員。但非靜態方法既能夠訪問靜態也能夠訪問非靜態
2) 靜態方法中不能夠定義this,super關鍵字
由於靜態優先於對象存在,而this、super表明的是實例對象。
3) 主函數是靜態的
l 主函數:一個特殊的函數,做爲程序的入口,能夠被jvm調用。
l 主函數的定義:
l Public:表明着該函數訪問權限是最大的;
l Static:表明主函數隨着類的加載就已經存在了。
l Void:主函數沒有具體的返回值。
l Main:不是關鍵字,可是是一個特殊的單詞,能夠被jvm識別。
l (string[] args):函數的參數,參數類型是一個數組,該數組中的元素是字符串,字符串類型的數組。
l 特色:主函數是固定格式的,只有這樣才能被jvm識別;同時主函數也有通常函數的特性,能夠被重載
五、 靜態的優劣
1) 優勢:能夠對對象的共享數據進行單獨空間的存儲,節省空間,沒有必要每個對象中都存儲一份。靜態成員能夠被類名直接調用,而非靜態成員必須經過對象來調用。
2) 劣勢:生命週期過長。訪問出現侷限性,靜態方法只能訪問靜態成員
六、 何時使用靜態
1) 何時定義靜態變量
當對象中出現共享數據時,該數據能夠被靜態所修飾;對象的特有數據須定義爲非靜態的,存放於堆內存對應的對象空間中。
2) 何時定義靜態函數
當功能內部沒有訪問到非靜態數據(對象的特有數據)時,能夠將此函數定義爲靜態的。
七、 靜態代碼塊和非靜態代碼塊
1) 靜態代碼塊:隨着類的加載而執行,只執行一次,並優先於主函數執行,用於給類進行初始化。
2) 構造代碼塊:隨着實例對象的建立而執行,每建立一個對象就會被執行一次,屬於實例對象。
執行順序:靜態代碼塊——>主函數——>構造代碼塊
書寫格式:
Static
{
靜態代碼塊中的執行語句。
}
第七講 單例設計模式
一、 概念
設計模式:解決某一類問題最行之有效的方法,java中有23種設計模式。
單例設計模式:解決一個類在內存中只存在一個對象的問題
二、 解決對象惟一性的方法
1) 禁止其餘程序創建該類對象:將構造函數私有化;
2) 爲了讓其餘程序能夠訪問到該類對象,須要在本類中自定義一個對象;
3) 爲了能讓其餘程序訪問到該類中對象,須要對外提供一些訪問方式:提供一個公開的方法來獲取該類對象
三、 單例設計模式表現形式
1) 餓漢式:類一被加載,就會在堆內存中建立該類對象。
2) 懶漢式:只有方法被調用時,纔會建立對象。
懶漢式的缺點:當建立對象的函數同時被多個程序調用時,懶漢式可能會出現錯誤。
解決方法:能夠經過鎖定(synchronized)來解決這個問題,並且經過雙重判斷對象是否爲空,來稍微提升運行效率。