課時8 構(gòu)造方法與匿名對象
實例化對象的格式
①類名稱 ②對象名稱 = ③new ④類名稱();
每一個點的目的
- ①類名稱:任何對象都應(yīng)該有其對應(yīng)的類,因為沒有類就不知道對象具備的屬性、方法。
- ②對象名稱:是一個唯一的標記,表示以后操作屬性、方法的標記。
- ③new:開辟新的堆內(nèi)存空間。
- ④類名稱():區(qū)別變量跟方法最直白的效果就是有沒有括弧。根類名稱相同的方法就應(yīng)該只有類的構(gòu)造方法,所以此處是在調(diào)用類的構(gòu)造方法。
通過以上的分析就應(yīng)該已經(jīng)清楚了所謂的構(gòu)造方法指的就是在使用關(guān)鍵字new實例化新對象的時候來進行調(diào)用的方法。
- 構(gòu)造方法的定義也需要遵守如下原則:
- 方法名稱必須與類名稱相同。
- 構(gòu)造方法沒有返回值類型聲明。(連聲明都沒有!)
- 每一個類中至少存在一個構(gòu)造方法,如果類中沒有定義任何構(gòu)造方法,則會生成一個無參的什么都不做的構(gòu)造方法。
以上我就可以理解為什么new 類名稱();的時候會執(zhí)行構(gòu)造方法中的代碼,其實這一步就是因為調(diào)用了類的構(gòu)造方法,構(gòu)造方法被調(diào)用后,里面的代碼塊執(zhí)行了。構(gòu)造方法是在new對象的時候才會調(diào)用。
- 疑問:構(gòu)造方法中既然沒有返回數(shù)據(jù),那么為什么不加void,進行函數(shù)返回值聲明?
- 首先一個類現(xiàn)在的組成是:屬性、方法、構(gòu)造方法。構(gòu)造方法是在使用關(guān)鍵字new的時候,同時調(diào)用的。而我們普通成員方法是在類實例化之后才能調(diào)用的。
這里Java是通過結(jié)構(gòu)化的偏差來進行歸類的,而不是通過名字進行歸類。比如構(gòu)造方法(沒有方法的返回值聲明),方法在重載的時候,根據(jù)傳入?yún)?shù)的類型進行區(qū)分。
- 首先一個類現(xiàn)在的組成是:屬性、方法、構(gòu)造方法。構(gòu)造方法是在使用關(guān)鍵字new的時候,同時調(diào)用的。而我們普通成員方法是在類實例化之后才能調(diào)用的。
如果一個類中已經(jīng)定義的構(gòu)造函數(shù),那個默認的構(gòu)造函數(shù)將不再執(zhí)行。
- 構(gòu)造方法的作用
- 構(gòu)造方法的調(diào)用和對象的內(nèi)存分配幾乎是同時完成的。幾乎是與完全是并不是等價的,所以可以利用構(gòu)造方法設(shè)置類中的屬性內(nèi)容,直白點就是構(gòu)造方法可以為類中的屬性進行初始化處理。
- 通過構(gòu)造方法設(shè)置內(nèi)容就可以避免重復(fù)的Setter調(diào)用。
- 在實際開發(fā)中setter除了具備設(shè)置數(shù)據(jù)的功能,更主要承擔的角色就是修改內(nèi)容的操作。
- 綜上構(gòu)造方法主要的作用就是對類中的屬性進行初始化。
既然構(gòu)造方法屬于方法,既然是方法就一定能進行重載。
在定義構(gòu)造方法重載的時候,需要注意一下定義結(jié)構(gòu)。我們再學(xué)程序的時候有一個規(guī)范化問題,什么叫做規(guī)范化呢?建議若干個構(gòu)造方法,按照參數(shù)個數(shù)的順序采用升序或降序排列。
同時注意在定義類的時候
- 第一部分寫屬性
- 第二部分寫構(gòu)造方法
- 第三部分寫普通方法
所有的靜態(tài)屬性或方法應(yīng)該寫到成員屬性或方法之前。
匿名對象

上圖這種形式就是匿名對象的體現(xiàn)。
但是匿名對象有問題
- 由于匿名對象不會有任何的??臻g所指向,所以我們使用一次之后,匿名對象就會成為垃圾空間。
課時9 簡單Java類
課時10 數(shù)組的定義與使用
所謂的數(shù)組就是一組相關(guān)類型的變量集合,并且這些變量可以按照統(tǒng)一的方式進行操作。數(shù)組本身屬于引用數(shù)據(jù)類型。既然數(shù)組是引用數(shù)據(jù)類型,這里面又會牽扯到內(nèi)存分配。
數(shù)組的語法有如下兩類
- 動態(tài)初始化數(shù)組 聲明并開辟數(shù)組 => 數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[長度]
- 當數(shù)組開辟空間之后,數(shù)組就可以通過來完成訪問,即:'數(shù)組名稱[索引]',數(shù)組索引從零開始。
- 當數(shù)組采用動態(tài)初始化之后,該數(shù)組中的每一個元素都是對應(yīng)該數(shù)據(jù)元素的默認值。
如果數(shù)組訪問的索引超過了數(shù)組范圍那么會產(chǎn)生數(shù)組索引越界錯誤

下圖中對動態(tài)創(chuàng)建的數(shù)組進行賦值

在對數(shù)組進行操作的時候,因為數(shù)組的長度是可知的,所以循環(huán)次數(shù)也是可知的,故應(yīng)該是用for循環(huán)來進行數(shù)組遍歷。
Java動態(tài)取得數(shù)組長度的方式:數(shù)組名稱.length
- 數(shù)組除了聲明并開辟數(shù)組空間的方式之外依舊有分布方式開辟數(shù)組空間的方法

***數(shù)組是引用數(shù)據(jù)類型,所以在使用數(shù)組的時候一定要進行開辟空間(實例化),如果沒有開辟空間的數(shù)組,一定會出現(xiàn)空指針錯誤

課時11 數(shù)組的定義與使用
既然數(shù)組時引用數(shù)據(jù)類型,所以數(shù)組也一定會發(fā)生引用類型傳遞?,F(xiàn)在的引用傳遞的本質(zhì)就是同一塊堆內(nèi)存空間,可以被不同的棧內(nèi)存空間所指向,與對象完全一樣。所有的引用傳遞都是一個套路。反過來說就是不同的棧內(nèi)存空間指向同一個堆內(nèi)存空間。

數(shù)組中[]只有在創(chuàng)建和使用數(shù)組的時候才會用到。
課時12 數(shù)組的定義與使用
- 數(shù)組靜態(tài)初始化的套路,都是先根據(jù)參數(shù)開閉堆內(nèi)存空間,然后在使用索引對數(shù)組每一項的內(nèi)容進行設(shè)置。這種做法都叫做動態(tài)初始化。
- 而數(shù)組在定義的時候可以同時設(shè)置內(nèi)容,這種初始化的方式就是靜態(tài)初始化。
靜態(tài)初始化語法: - 簡化格式 : 數(shù)據(jù)類型[] 數(shù)組名稱 = {值1,值2,值3} => 但是并不提倡
- 完整格式 : 數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[] {值1,值2,值3}
我們之前有提過匿名對象的概念,而簡化格式不能構(gòu)成匿名數(shù)組,完整格式new 數(shù)據(jù)類型[] {值1,值2,值3}是可以算得上一個匿名數(shù)組的
靜態(tài)初始化唯一的好處就是內(nèi)容已經(jīng)存在,不用再一一設(shè)置了。
數(shù)組最大的缺陷就是長度固定。所以才需要通過一些數(shù)據(jù)結(jié)構(gòu),來實現(xiàn)一個類似于長度能動態(tài)改變的數(shù)組。
課時13 二維數(shù)組(不重要可跳過)
- 正常情況下,我們通過一個索引就可以取得數(shù)組中唯一的一個記錄。這樣的數(shù)組可以理解為一維數(shù)組。
- 二維數(shù)組
圖片.png
比如我們要確定這樣一個數(shù)組
圖片.png
我們就可以說這行是1列是5。
所以二維數(shù)組的語法就是數(shù)組名稱[行索引][列索引],這樣的一個結(jié)構(gòu)就是表的結(jié)構(gòu)。
二維數(shù)組是二維坐標系,三維數(shù)組如下:
圖片.png
二維數(shù)組語法
圖片.png
圖片.png
由于輸出很麻煩,所以并不流行,只是作為一個概念,我們知道了就行。




