天天看點

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

第4章_面向對象程式設計(上)

目錄

類的成員之屬性

類的成員之方法

匿名對象的使用                               

方法的重載      

可變個數的形參

關于變量指派   

幾道網紅面試題

遞歸方法的使用(了解)

類的成員之一:屬性

 屬性(成員變量)   vs  局部變量

1.相同點:

1.1  定義變量的格式:資料類型  變量名 = 變量值

1.2 先聲明,後使用

1.3 變量都有其對應的作用域 

2.不同點:

2.1 在類中聲明的位置的不同

  • 屬性:直接定義在類的一對{}内
  • 局部變量:聲明在方法内、方法形參、代碼塊内、構造器形參、構造器内部的變量

2.2 關于權限修飾符的不同

  • 屬性:可以在聲明屬性時,指明其權限,使用權限修飾符。

常用的權限修飾符:private、public、預設(不寫)、protected ------>(類的封裝性部分會詳講)

目前學習階段,聲明屬性時,使用預設就可以了。

  • 局部變量:不可以使用權限修飾符

2.3 預設初始化值的情況:

  • 屬性:類的屬性,根據其類型,都有預設初始化值。

整型(byte、short、int、long):0

浮點型(float、double):0.0

字元型(char):0  (或'\u0000')

布爾型(boolean):false

引用資料類型(類、數組、接口):null

  • 局部變量:沒有預設初始化值。意味着,我們在調用局部變量之前,一定要顯式指派。
  • 特别地:形參在調用方式時指派。

2.4 在記憶體中加載的位置:

  • 屬性:加載到堆空間中(非static)(static放在方法區)
  • 局部變量:加載到棧空間

類的成員之二:方法

day08-CustomerTest.java

類中方法的聲明和使用

方法(函數):描述類應該具有的功能。

比如:

Math類:sqrt()\random() \...

Scanner類:nextXxx() ...

Arrays類:sort() \ binarySearch() \ toString() \ equals() \ ...

1.舉例:

public void eat(){}

public void sleep(int hour){}

public String getName(){}

public String getNation(String nation){}

2. 方法的聲明:

權限修飾符  傳回值類型  方法名(形參清單){

                    方法體

}

注意:static、final、abstract 來修飾的方法後面會講。

 3. 說明:

         3.1 關于權限修飾符:預設方法的權限修飾符先都使用public

              Java規定的4種權限修飾符:private、public、預設、protected。------封裝性會細說

         3.2 傳回值類型: 有傳回值  vs 沒有傳回值

  •              如果方法有傳回值

                    則必須在方法聲明時,指定傳回值的類型。同時,方法中,需要使用return關鍵字來傳回指定類型的變量或常量:“return 資料”。

  •              如果方法沒有傳回值,

                    則方法聲明時,使用void來表示。通常,沒有傳回值的方法中,就不需要使用return.但是,如果使用的話,隻能“return;”表示結束此方法的意思。

  •             我們定義方法該不該有傳回值?

                   ① 題目要求

                   ② 憑經驗:具體問題具體分析

         3.3 方法名:屬于辨別符,遵循辨別符的規則和規範,“見名知意”

         3.4 形參清單: 方法可以聲明0個,1個,或多個形參。

  •          3.4.1 格式:資料類型1 形參1,資料類型2 形參2,...
  •          3.4.2 我們定義方法時,該不該定義形參?

                   ① 題目要求

                   ② 憑經驗:具體問題具體分析

         3.5 方法體:方法功能的展現。         

4.return關鍵字的使用

  • 使用範圍:使用在方法體中
  • 作用:

                ① 結束方法

                ② 針對于有傳回值類型的方法,使用"return 資料"方法傳回所要的資料。

  • 注意點:return關鍵字後面不可以聲明執行語句。

5. 方法的使用中,可以調用目前類的屬性或方法

  • 特殊的:方法A中又調用了方法A:遞歸方法。
  • 方法中,不可以定義方法。

day09 InstanceTest.java

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

匿名對象的使用                               

1.了解:我們建立的對象,沒有顯式的賦給一個變量名。即為匿名對象        

2.特征:匿名對象隻能調用一次。                        

3.使用:如下           

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

方法的重載      

方法的重載(overload)

OverLoadTest.java

  • 1.定義:在同一個類中,允許存在一個以上的同名方法,隻要它們的參數個數或者參數類型不同即可。           

 "兩同一不同":

同一個類、相同方法名

參數清單不同:參數個數不同,參數類型不同,順序不同等

  • 2. 舉例:

Arrays類中重載的sort() / binarySearch()

  • 3.判斷是否是重載:                                               

跟方法的權限修飾符、傳回值類型、形參變量名、方法體都沒有關系!

  • 4. 在通過對象調用方法時,如何确定某一個指定的方法:                              

方法名+ 參數清單

可變個數的形參

  • 1.jdk 5.0新增的内容
  • 2.具體使用:

2.1 可變個數形參的格式:資料類型 ... 變量名

2.2 當調用可變個數形參的方法時,傳入的參數個數可以是:0個,1個,2個,。。。

2.3 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成重載

2.4 可變個數形參的方法與本類中方法名相同,形參類型為相同資料類型的數組之間不構成重載。換句話說,參數為可變參數的資料類型與數組資料類型,作用相同,二者不能共存。

2.5 可變個數形參在方法的形參中,必須聲明在末尾

2.6 可變個數形參在方法的形參中,最多隻能聲明一個可變形參。

關于變量指派   

  • 如果變量是基本資料類型,此時指派的是變量所儲存的資料值。    
  • 如果變量是引用資料類型,此時指派的是變量所儲存的資料的位址值。

方法的形參的傳遞機制:值傳遞

1.形參:方法定義時,聲明的小括号内的參數

實參:方法調用時,實際傳遞給形參的資料

2.值傳遞機制:

如果參數是基本資料類型,此時實參賦給形參的是實參真實存儲的資料值。

如果參數是引用資料類型,此時實參賦給形參的是實參存儲資料的位址值。 

幾道網紅面試題

貌似是考查方法的參數傳遞

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式
第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式
第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式
第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式
第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

遞歸方法的使用(了解)

  • 1.遞歸方法:一個方法體内調用它自身。                          
  • 2. 方法遞歸包含了一種隐式的循環,它會重複執行某段代碼,但這種重複執行無須循環控制。  、
  • 遞歸一定要向已知方向遞歸,否則這種遞歸就變成了無窮遞歸,類似于死循環。          

面向對象的特征一:封裝與隐藏

3W:what? why? how?                         

一、問題的引入:                                                      

 當我們建立一個類的對象以後,我們可以通過"對象.屬性"的方式,對對象的屬性進行指派。這裡,指派操作要受到屬性的資料類型和存儲範圍的制約。除此之外,沒有其他制約條件。但是,在實際問題中,我們往往需要給屬性指派加入額外的限制條件。這個條件就不能在屬性聲明時展現,我們隻能通過方法進行限制條件的添加。(比如:setLegs())同時,我們需要避免使用者再使用"對象.屬性"的方式對屬性進行指派。則需要将屬性聲明為私有的(private). 此時,針對于屬性就展現了封裝性。

二、封裝性的展現:                                                     

我們将類的屬性xxx私有化(private),同時,提供公共的(public)方法來擷取(getXxx)和設定(setXxx)此屬性的值

拓展:封裝性的展現有很多:① 如上  ② 不對外暴露的私有的方法  ③ 單例模式   ...

三、封裝性的展現,需要權限修飾符來配合。                                          

  • 1.Java規定的4種權限(從小到大排列):private、預設(不寫)、protected 、public            
  • 2.4種權限可以用來修飾類及類的内部結構:屬性、方法、構造器、内部類                            
  • 3.具體的,4種權限都可以用來修飾類的内部結構:屬性、方法、構造器、内部類。修飾類的話,隻能使用:預設、public
第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

總結封裝性:Java提供了4種權限修飾符來修飾類及類的内部結構,展現類及類的内部結構在被調用時的可見性的大小。       

類的成員之三:構造器

類的結構之三:構造器(或構造方法、constructor)的使用

一、構造器的作用:

  • 1.建立對象
  • 2.初始化對象的資訊

建立類的對象:new + 構造器

二、說明:

  • 1.如果沒有顯式的定義類的構造器的話,則系統預設提供一個空參的構造器
  • 2.定義構造器的格式:權限修飾符  類名(形參清單){} 
  • 3.一個類中定義的多個構造器,彼此構成重載
  • 4.一旦我們顯式的定義了類的構造器之後,系統就不再提供預設的空參構造器,空參構造器需要自己寫出來。
  • 5.一個類中,至少會有一個構造器。

總結:屬性指派的先後順序

  • ① 預設初始化
  • ② 顯式初始化(定義類時的聲明屬性并初始化)
  • ③ 構造器中初始化
  • ④ 通過"對象.set方法" 或 "對象.屬性"的方式指派

以上操作的先後順序:① - ② - ③ - ④

JavaBean

JavaBean是一種Java語言寫成的可重用元件。

所謂JavaBean,是指符合如下标準的Java類:

  • 類是公共的
  • 有一個無參的公共的構造器
  • 有屬性(一般為private),且有對應的get、set方法

UML類圖

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式

this關鍵字

this關鍵字的使用:                                                       

  • 1.this可以用來修飾、調用:屬性、方法、構造器
  • 2.this修飾屬性和方法:

this了解為:目前對象  或 目前正在建立的對象

2.1  在類的方法中,我們可以使用"this.屬性"或"this.方法"的方式,調用目前對象屬性或方法。但是,通常情況下,我們都選擇省略"this."。特殊情況下,如果方法的形參和類的屬性同名時,我們必須顯式的使用"this.變量"的方式,表明此變量是屬性,而非形參。

2.2 在類的構造器中,我們可以使用"this.屬性"或"this.方法"的方式,調用目前正在建立的對象屬性或方法。但是,通常情況下,我們都選擇省略"this."。特殊情況下,如果構造器的形參和類的屬性同名時,我們必須顯式的使用"this.變量"的方式,表明此變量是屬性,而非形參。

  • 3. this調用構造器

① 我們在類的構造器中,可以顯式的使用"this(形參清單)"方式,調用本類中指定的其他構造器

② 構造器中不能通過"this(形參清單)"方式調用自己

③ 如果一個類中有n個構造器,則最多有 n - 1構造器中使用了"this(形參清單)"

④ 規定:"this(形參清單)"必須聲明在目前構造器的首行

⑤ 構造器内部,最多隻能聲明一個"this(形參清單)",用來調用其他的構造器

package和import關鍵字

一、package關鍵字的使用

  • 1.為了更好的實作項目中類的管理,提供包的概念
  • 2.使用package聲明類或接口所屬的包,聲明在源檔案的首行
  • 3.包,屬于辨別符,遵循辨別符的命名規則、規範(xxxyyyzzz)、“見名知意”
  • 4.每"."一次,就代表一層檔案目錄。

補充:

同一個包下,不能命名同名的接口、類。

不同的包下,可以命名同名的接口、類。

二、import關鍵字的使用

import:導入

  • 1. 在源檔案中顯式的使用import結構導入指定包下的類、接口
  • 2. 聲明在包的聲明和類的聲明之間
  • 3. 如果需要導入多個結構,則并列寫出即可
  • 4. 可以使用"xxx.*"的方式,表示可以導入xxx包下的所有結構
  • 5. 如果使用的類或接口是java.lang包下定義的,則可以省略import結構
  • 6. 如果使用的類或接口是本包下定義的,則可以省略import結構
  • 7. 如果在源檔案中,使用了不同包下的同名的類,則必須至少有一個類需要以全類名的方式顯示。此時導包會報錯。
  • 8. 使用"xxx.*"方式表明可以調用xxx包下的所有結構。但是如果使用的是xxx子包下的結構,則仍需要顯式導入
  • 9. import static:導入指定類或接口中的靜态結構:屬性或方法。

MVC設計模式

第4章_面向對象程式設計(上)類的成員之一:屬性類的成員之二:方法匿名對象的使用                               方法的重載      可變個數的形參關于變量指派   幾道網紅面試題     遞歸方法的使用(了解)面向對象的特征一:封裝與隐藏類的成員之三:構造器JavaBeanUML類圖this關鍵字package和import關鍵字MVC設計模式