一、面向對象
面向過程指的是面對與一個問題的解決方案,更多的情況下是不會做出重用的設計思考的,
而面向對象的主要設計模式為模塊化設計,並且可以進行重用配置。在整個的面向對象的設計裡面更多情況下考慮的是標準,在使用的時候根據標準進行拼裝。
面向對象設計的三個主要特徵:
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循環,直接將數組裡的每個內容提取出來,不需要通過下標來操作。
十五、二維數組
很少涉及
十六、數組與方法
對於引用數據而言,主要的特點就是可以與方法進行引用傳遞,而數組也是引用數組。
十七、數組排序
冒泡排序。
進行類設計的時候,如果類中沒有屬性存在的意義,那麼定義的方法就沒有必要使用普通方法了,因為普通方法需要在有實例化對下個產生的情況下才可以調用。
十八、數組反轉:
數組轉置,如果再新建一個數組來保存原數組的轉置,然後再將轉置之後的數組賦值給原數組的話,原數組對應的數組就會變成垃圾。不可取。