構造方法
什么是構造方法
構造方法也叫構造函數(shù)紧武,或者叫構造器
1、構造方法的方法名必須與類名相同
2敏储、構造方法沒有返回值阻星,也不寫void
構造方法的作用:為對象的屬性初始化
類的屬性在實例化時被賦予默認值,類的屬性是由構造方法賦予默認值的
默認構造函數(shù)
一個類如果沒有顯示的定義構造函數(shù)已添,那么這個類默認具有無參數(shù)的構造函數(shù)妥箕。
默認構造函數(shù)為對象的屬性賦默認值。
輸出結果是
我的名字是null,我的成績是0,我的學號是null
為什么輸出的是null,0null更舞?
因為本例中沒有定義構造函數(shù)畦幢,系統(tǒng)會自動添加一個默認構造函數(shù),默認構造函數(shù)是無參的缆蝉,會為所有的屬性賦默認值宇葱,因此name是null,score是0刊头,no是null黍瞧。
特殊情況:
如果顯示的定義了構造函數(shù),那么默認構造函數(shù)就沒有啦原杂。
例如:
構造方法的調用
構造方法是在實例化對象時調用的印颤。并且實例化時傳遞的參數(shù)必須有構造方法的參數(shù)一致。
例如:
構造方法不允許對象名調用穿肄。例如下面的調用是錯誤的
構造方法的重載
這個實例化為什么報錯
因為new 類時必須調用構造方法年局,而第8行有兩個參數(shù)haha和76,因此會調用有兩個參數(shù)的構造被碗,但是類中沒有定義有兩個參數(shù)的構造某宪,因此報錯。
?this關鍵字
?this是java中的一個關鍵字锐朴。?
?this代表誰this代表的是當前正在運行的對象兴喂。
示例如下:
運行結果
我是haha,我的成績是76,我的學號是null
本例中構造函數(shù)的參數(shù)都帶1焚志,這種命名不優(yōu)雅衣迷,如果改成如下的命名方式
運行結果
我是null,我的成績是0,我的學號是null
分析原因為什么是null酱酬,0壶谒,null
看構造函數(shù)
原因是
前后的name都是方法參數(shù)name
前后的score都是方法參數(shù)score
在類中,如果類的屬性名和方法內(nèi)部的局部變量同名時膳沽,那么在方法內(nèi)部使用的是局部變量汗菜,也就是變量使用遵循就近原則让禀。
如此看來類的屬性名和構造方法的參數(shù)名稱不能相同。
如果一定要讓類的屬性名和構造方法的參數(shù)名稱相同陨界,應該怎么辦巡揍?
例如:
解決辦法是使用this關鍵字
解決辦法如下:
運行結果:
我是haha,我的成績是76,我的學號是null
推薦這種寫法
什么時候可以省略this
在非static方法內(nèi)部使用屬性菌瘪,可以省略腮敌,例如
還可以這樣寫
但是推薦寫上this
this可以調用重載的構造方法
例如:我們知道學生姓名和成績,不知道學號俏扩,但是顯示學生信息時要求將學號顯示為”未知“糜工,而不是null
分析:
有兩種情況
1. 知道姓名和成績,不知道學號
2. 知道姓名录淡,成績捌木,學號
所以要設計兩種構造的重載,設計結果如下
特別注意:下面的代碼是錯誤的
因為this調用本類其他構造方法時赁咙,必須時構造方法內(nèi)的第一行代碼钮莲。
成員變量
成員變量是類的屬性,是定義在類內(nèi)彼水,方法外的變量。
例如
成員變量和局部變量的區(qū)別
作用域不同
成員變量作用域:整個類
局部變量的作用域:方法內(nèi)
初始值不同
成員變量由構造函數(shù)初始化的
局部變量需要手動初始化
在同一個方法中不允許有同名的局部變量极舔,在不同的方法中可以有同名的局部變量凤覆。
局部變量可以和成員變量名相同,并且在使用時局部變量有更高的優(yōu)先級拆魏。
對象數(shù)組
需求:
班級里有5名學生盯桦,輸入每名學生的姓名和總成績。
根據(jù)學生總成績從高到低排名渤刃,顯示學生名次拥峦、姓名、總成績卖子。
分析:
有哪些對象略号?有學生對象,有班級對象
對象有什么屬性和方法洋闽?
學生有姓名玄柠,成績的屬性,學生不需要方法
班級有多名學生的屬性诫舅,班級有排序方法羽利,輸出的方法
代碼:
1:創(chuàng)建學生類
班級類
測試類
運行結果
姓名:楊禮之,成績90,名次:1
姓名:田舍翁,成績80刊懈,名次:2
姓名:喬思義,成績70这弧,名次:3
姓名:余晨,成績65娃闲,名次:4
姓名:劉茂兵,成績60,名次:5