一、面向對象
面向過程指的是面對與一個問題的解決方案,更多的情況下是不會做出重用的設計思考的,
而面向對象的主要設計模式為子產品化設計,并且可以進行重用配置。在整個的面向對象的設計裡面更多情況下考慮的是标準,在使用的時候根據标準進行拼裝。
面向對象設計的三個主要特征:
1.封裝性:内部操作對外部而言不可見,當内部的操作都不可直接使用的時候才是最安全的
2.繼承性:在已有的結構的基礎上繼續進行功能的擴充,
3.多态性:是在繼承性的基礎上擴充而來的概念,指的是類型的轉換處理。
在進行面向兌現程式的開發之中一般還有三個步驟
OOA:面向對象分析
OOD:面向對象設計
OOP:面向對象程式設計
二、類與對象
類是對某一類事物的共性的抽象概念,而對象描述的是一個具體的産物。
每一個屬性的集合就構成了一個對象,而每一個屬性的定義都應該是群體的定義,而群體的定義就形成了一個類
在類中一般都會有兩個屬性:1.成員屬性 2.操作方法
三、對象記憶體分析
兩塊常用的記憶體空間:
1.堆記憶體:儲存的是對象的具體資訊,在程式之中,堆記憶體空間的開辟是通過new來完成的.
2.棧記憶體:儲存的的是一塊堆記憶體的位址,即:通過位址找到堆記憶體。
對象執行個體化有兩種文法:一種是聲明并執行個體化對象,另一種是分布完成的操作
需要特别注意,所有的對象在調用類中的屬性和方法的時候,必須要執行個體化完成後才可以實行,隻聲明,但是不執行個體化的話,就會産生空指針異常。
四、對象引用分析
類本身屬于引用資料類型,既然是引用資料類型,那麼就牽扯到記憶體的引用傳遞,所謂的引用傳遞,同一塊堆記憶體可以被不同的棧記憶體指向。
五、引用傳遞與垃圾産生分析
引用傳遞的本質就是一場堆記憶體的調戲遊戲,但是對于引用傳遞如果處理不當,也會造成垃圾的産生。
Person per1 = new Person(); per1.name="張三" per.age = 18;
Person per2 = new Person(); per1.name="李四" per.age = 18;
per2=per1;//當講per1的位址指派給per2的時候,per2的記憶體位址也就被覆寫了,per2原來所指向的堆記憶體沒有指向了,産生垃圾。
所謂的垃圾空間指的就是沒有任何棧記憶體所指向的堆記憶體,所有的垃圾将被GC(垃圾收集器)不定期進行回收并釋放無用空間
六、成員屬性封裝
類是由屬性和方法組成,一般而言方法都是對外提供服務的,是以是不會進行封裝處理的,但是成員屬性需要較高的安全性,是以往往需要對其進行保護,這個時候就需要采用封裝性對屬性進行保護。
在預設的情況下,對于類中的屬性是可以通過其他類利用對象進行調用的。有可能設定錯誤的資料,這就需要通過private修飾詞進行封裝處理。
屬性一旦封裝之後将不能直接通路,即:對外部不可見,但是對類的内部是可以調用的,通過在類内部設定get和set方法來實作外部調用,可以在方法内添加條件來限制對成員屬性的修改。
七、構造方法與匿名對象
現在的程式使用類的時候一般先聲明并執行個體化對象,執行個體化對象的時候,屬性多的情況下就要調用多個set方法,太繁瑣,是以就有了構造方法的概念。
構造方法的方法名與類名相同,沒有傳回值。對類的對象進行初始化。如果類中沒有構造方法,那麼會預設提供一個無參構造,如果定義了一個有參構造,那麼預設的無參構造就不會被建立。
構造函數為什麼沒有傳回值,而且為什麼不用void?程式編譯器是根據代碼結構來進行編譯的,執行的時候也是根據代碼結構來執行的。如果沒有void就和普通方法一樣了,最大差別是構造方法是在類執行個體化的時候調用的,普通方法是在對象執行個體化之後調用的。
隻通過執行個體化對象來進行類的操作也是可以的,由于該對象沒有任何的引用,是以隻使用一次就會成為垃圾,被CG處理并釋放空間。
隻要是方法都可以傳遞任意的資料類型(基本資料類型、引用資料類型)
八、this調用本類屬性和方法
this可以算是Java裡面比較複雜的關鍵字,使用方法:
1.目前類中的屬性:this.屬性
2.目前類中的方法,(普通方法、構造方法):this()、this.方法名();
3.描述目前對象:
使用this調用目前類中的屬性,在java程式中“{}”是作為一個結構體的邊界符,那麼在程式裡進行變量指派的是偶,将以“{}”作為一個查找邊界。
對于本類構造方法的互相調用需要注意:
1.構造方法必須在執行個體化新對象的的時候調用,是以“this()”的語句隻允許放在構造方法的第一行
2.構造方法中能夠調用普通方法,但是普通方法不能通過this調用構造方法。
3.構造方法互相調用時必須要留程式的出口,别形成死循環。
一個類中含有四個構造函數,可能包含多個重複的指派語句,可以通過互相調用來減少重複語句。
九、簡單Java類
在以後的開發和設計過程中簡單Java類都将作為一個重要的組成部分存在,簡單java類無處不在,并且有可能會産生一系列的變化。
對于簡單Java類而言,其核心開發如下:
1.類名稱一定要有意義,可以明确的描述某一類事物
2.類之中所有屬性都必須使用private進行封裝,同時封裝後的屬性必須要有set和get方法
3.類中可以有無數個構造方法,但是必須要保留有無參構造方法。
4.類之中不允許出現任何的輸入語句,所有的内容的擷取必須傳回。
5.可以建立一個getInfo方法,傳回所有的屬性。
十、static關鍵字
1.static修飾屬性
static關鍵字可以用來定義屬性和方法,在一個類中所有的屬性一旦定義了,都交由各自的堆記憶體來儲存。
重複儲存且修改不友善的屬性,static修飾的屬性儲存在全局資料區。由于靜态屬性本身時一個公共資源,是以應該通過所有類的最高代表(類)來調用。非static屬性必須在執行個體化對象産生之後才可以使用, 而static屬性可以在沒有執行個體化對象産生的時候由類直接調用。
2.static修飾方法
定義static方法之後,類中方法就有了兩種:靜态方法和非靜态方法。靜态方法隻能調用靜态屬性和方法,非靜态方法允許調用靜态屬性和方法。
3.static應用:
(1)統計建立了幾個對象,需要建立static屬性
(2)實作屬性的自動命名的處理,有值的時候傳回自己的值,沒有值可以直接調用無參構造,然後通過this調用含參構造給賦預設值。
十一、代碼塊
在程式中使用“{}”定義的的結構成為代碼塊,根據代碼塊出現的位置和定義的關鍵字,分為普通代碼塊、構造快、靜态塊,同步代碼塊。
普通代碼塊:可以在一個方法之中進行一些結構的拆分,以防止相同變量名帶來的互相影響。
構造代碼塊:構造代碼塊會優先于構造方法執行,并且每一次執行個體化新對象的時候都會調用構造快中的代碼。
靜态代碼塊:使用static關鍵字定義的代碼塊,1.主類中定義的靜态代碼塊,2.非主類中定義靜态代碼塊。靜态代碼塊會優先于構造塊執行,不管有多少個執行個體化對象出現,靜态代碼塊隻執行一次,主要目的是為類中的靜态屬性初始化
十二、數組的定義與使用
概念:如果說我們現在要定義一百個整型變量,那麼傳統的方式太繁瑣,不适合程式維護,沒有任何的參考規律,一組相關變量的集合,數組是引用資料類型,涉及記憶體配置設定。new
數組的定義格式:
數組的動态初始化:聲明并初始化數組:資料類型 數組名稱 [ ] = new 資料類型 [長度];
資料類型 [ ] 數組名稱 = new 資料類型 [長度];
數組的靜态初始化:在數組定義的時候就為其設定好了裡面的内容
簡化格式:資料類型 數組名稱 [ ] = {資料1,資料2,資料3.。。。}
完整格式:資料類型 數組名稱 [ ] = new 資料類型 [ ]{資料1,資料2,資料3.。。。}
十三、數組的引用傳遞
數組記憶體分析:數組屬于引用資料類型,一定會發生引用傳遞,必須提供有執行個體化對象,才能使用下标進行數組的操作,否則一定會出現空指針異常。
十四、foreach輸出
增強型的for循環,直接将數組裡的每個内容提取出來,不需要通過下标來操作。
十五、二維數組
很少涉及
十六、數組與方法
對于引用資料而言,主要的特點就是可以與方法進行引用傳遞,而數組也是引用數組。
十七、數組排序
冒泡排序。
進行類設計的時候,如果類中沒有屬性存在的意義,那麼定義的方法就沒有必要使用普通方法了,因為普通方法需要在有執行個體化對下個産生的情況下才可以調用。
十八、數組反轉:
數組轉置,如果再建立一個數組來儲存原數組的轉置,然後再将轉置之後的數組指派給原數組的話,原數組對應的數組就會變成垃圾。不可取。