第三章谁尸、面向?qū)ο?構(gòu)造方法

1.7構(gòu)造方法的講解

關(guān)于java類的構(gòu)造方法

意義就是通過定義一個(gè)構(gòu)造方法赛不,使得其所在的類能夠在主程序中隨時(shí)創(chuàng)建一個(gè)位于堆內(nèi)存的這個(gè)函數(shù)就對(duì)象,

這樣的話浪耘,只要new能創(chuàng)建一個(gè)對(duì)象隨時(shí)訪問乱灵。

1、構(gòu)造方法又被稱為構(gòu)造函數(shù)/構(gòu)造器/constructor

2七冲、構(gòu)造方法語(yǔ)法結(jié)構(gòu):

[修飾符列表]構(gòu)造方法名(形式參數(shù)列表)

{

構(gòu)造方法體痛倚;

}

3、回顧普通方法的語(yǔ)法結(jié)構(gòu):

[修飾符列表]構(gòu)造方法名(形式參數(shù)列表)

{

方法體澜躺;

}

4蝉稳、對(duì)于構(gòu)造方法來說“返回值類型”不需要指定,并且也不能寫void掘鄙,

只要寫上void耘戚,那么這個(gè)方法就成為了普通方法。

5操漠、對(duì)于構(gòu)造方法來說收津,構(gòu)造方法的方法名和類名保持一致。

6浊伙、構(gòu)造方法的作用:

構(gòu)造方法存在的意義是撞秋,通過構(gòu)造方法的調(diào)用,可以創(chuàng)建對(duì)象嚣鄙。

7吻贿、構(gòu)造方法應(yīng)該怎么調(diào)用?

普通方法是這樣調(diào)用的:方法修飾符中有static的時(shí)候:類名:方法名(實(shí)參列表)哑子,方法修飾符列表中沒有static的時(shí)候:引用.方法名(實(shí)參列表)

構(gòu)造方法調(diào)用的方式:new構(gòu)造方法名()

8舅列、構(gòu)造·方法調(diào)用執(zhí)行之后有返回值嗎?

每一個(gè)構(gòu)造方法實(shí)際執(zhí)行結(jié)束之后都有返回值卧蜓,但是這個(gè)return值帐要;這樣的語(yǔ)句不需要寫,構(gòu)造方法結(jié)束的時(shí)候java程序自動(dòng)返回值烦却。

并且返回值類型是構(gòu)造方法所在類的類型宠叼,由于構(gòu)造方法的返回值類型是類本身,所以返回值類型不需要編寫。

9冒冬、myeclipse注釋和取消注釋快捷鍵ctrl+/,多行注釋ctrl+shift+/;

10伸蚯、當(dāng)一個(gè)類中沒有定義任何構(gòu)造方法的話,系統(tǒng)默認(rèn)給該類提供一個(gè)無(wú)參數(shù)構(gòu)造方法简烤,這個(gè)構(gòu)造方法被稱為缺省構(gòu)造器剂邮。

11、當(dāng)一個(gè)類顯示的將構(gòu)造方法定義出來了横侦,那么系統(tǒng)則不再默認(rèn)為這個(gè)類提供缺省構(gòu)造器挥萌,建議開發(fā)中手動(dòng)的為當(dāng)前類提供無(wú)參數(shù)構(gòu)造方法,因此無(wú)參數(shù)構(gòu)造方法太常用了枉侧。

12引瀑、構(gòu)造方法支持重載機(jī)制,在一個(gè)類當(dāng)中編寫多個(gè)方法榨馁,這多個(gè)構(gòu)造方法顯然已經(jīng)構(gòu)成方法重載機(jī)制憨栽。(即通過不同類型的實(shí)參,調(diào)用同一個(gè)方法實(shí)現(xiàn)不同功能)

public class User()

{

public User(int i)//1

{

}

}

public class ConstructorTest

{

public static void main(String[]args)

{

//創(chuàng)建User對(duì)象

//調(diào)用User類的構(gòu)造方法來完成對(duì)象的創(chuàng)建

User u=new user()

}

}

如果1處注釋掉翼虫,則情況就是第十個(gè)情況系統(tǒng)會(huì)給給這個(gè)類提供一個(gè)無(wú)參數(shù)構(gòu)造方法

如果1處不注釋掉屑柔,則會(huì)報(bào)錯(cuò),因?yàn)閡ser()與user(int i)不同珍剑,因此報(bào)錯(cuò)會(huì)提示沒有定義user()掸宛。

public class User()

{

public User()//1

{

System.out,println("user's Default Constructor Invoke!")招拙;

}

public User(int i)//1

{

System.out,println("int")唧瘾;

}

public User(string i)//1

{

System.out,println("string");

}

public User(int i迫像,string j)//1

{

System.out,println("int劈愚,string");

}

}

public class ConstructorTest

{

public static void main(String[]args)

{

//創(chuàng)建User對(duì)象

//調(diào)用User類的構(gòu)造方法來完成對(duì)象的創(chuàng)建

//以下程序創(chuàng)建了4個(gè)對(duì)象闻妓,只要構(gòu)造函數(shù)調(diào)用就會(huì)創(chuàng)建對(duì)象,并且一定是在“堆內(nèi)存”中開辟內(nèi)存空間掠械。

User u=new user()由缆;//user()實(shí)際上是構(gòu)造方法的方法名。

User u=new user(10)猾蒂;

User u=new user(“張三”)均唉;

User u=new user(10,“張三”)肚菠;//方法的重載

//調(diào)用static的方法:類名.

ConstructorTest.dosome()舔箭;//執(zhí)行一遍dosome

dosme();//類內(nèi)方法的調(diào)用,再次執(zhí)行一遍dosome

//調(diào)用沒有static的方法:引用.

//doOther方法在ConstructorTest對(duì)象,調(diào)用無(wú)參數(shù)構(gòu)造方法层扶。

//創(chuàng)建ConstructorTest01對(duì)象箫章,調(diào)用無(wú)參數(shù)構(gòu)造方法。

ConstructorTest t=new ConstructorTest()镜会;//一個(gè)類中沒有任何構(gòu)造方法的話檬寂,系統(tǒng)默認(rèn)提供一個(gè)無(wú)參數(shù)構(gòu)造器。

t.doother()戳表;

}

/**

*這是一個(gè)帶有static的方法桶至,方法名dosome

*/這個(gè)注釋將會(huì)被放在系統(tǒng)的dosome解釋中

public static void dosome()

{

System.out,println("dosome");

}

public? void doother()

{

System.out,println("doother")匾旭;

}

}

構(gòu)造方法的另一個(gè)作用镣屹;

1、創(chuàng)建對(duì)象

2价涝、創(chuàng)建對(duì)象的同時(shí)女蜈,初始化實(shí)例變量的內(nèi)存空間。成員變量之實(shí)例變量沒有手動(dòng)賦值的時(shí)候飒泻,系統(tǒng)默認(rèn)賦值鞭光,南無(wú)這個(gè)系統(tǒng)默認(rèn)賦值是在什么時(shí)候完成的呢?

不是泞遗,因?yàn)樵陬惣虞d的時(shí)候只加載代碼片段惰许,還沒來得及創(chuàng)建對(duì)象。所以此時(shí)實(shí)例變量都沒有初始化史辙。

實(shí)際上汹买,實(shí)測(cè)變量的內(nèi)存空間是在構(gòu)造方法執(zhí)行過程當(dāng)中完成開辟的。完成初始化的聊倔。

系統(tǒng)在默認(rèn)賦值的時(shí)候晦毙,也是在構(gòu)造方法過程當(dāng)中完成的賦值。

實(shí)例變量默認(rèn)值:

int short byte long 0

float double 0.0

boolean false true

實(shí)例變量是存儲(chǔ)在jvm堆內(nèi)存中

public class Account

{

private String actno;//賦初值null

private double balance;

}

public class ConstructorTest

{

public static void main(String[]args)

{

//在eclipse中查看訪問的是哪個(gè)屬性耙蔑,查看訪問的是哪個(gè)方法见妒?

//按ctrl鍵,鼠標(biāo)移動(dòng)到查看的元素上甸陌;出現(xiàn)下劃線時(shí)候開始單擊须揣。

//創(chuàng)建對(duì)象

Account act1=new Account();

System.out,println("賬號(hào)"+)钱豁;

}

}

ctrl+o:查看類中的元素

mydeclipse快速編輯支持多行同時(shí)編輯:塊編輯

封裝:屬性私有化耻卡,set和get

對(duì)象和引用

引用:可以是局部變量也可以是成員變量。

public class Test

{

public static void main(String[]args)

{

int i=10牲尺;

add(i)卵酪;

System.out,println("main-->"+i);//10

}

public static void add(int i)

{

i++;

System.out,println("add-->"+i);//11

}

}

因?yàn)楫?dāng)方法調(diào)用完i后并不會(huì)返回i的值溃卡,因此i會(huì)恢復(fù)原來的值溢豆。

從內(nèi)存的角度來說是main中的i內(nèi)存地址中的10復(fù)制了之后給了add方法中,讓add進(jìn)行操作塑煎,這并不會(huì)影響main中i的值沫换。因此,參數(shù)傳遞時(shí)最铁,實(shí)際上傳遞的是參數(shù)值而非地址讯赏。

public class Test

{

public static void main(String[]args)

{

user u=new User(20);

add(u)冷尉;

System.out,println("main-->"+u.age)漱挎;//21

}

public static void add(int i)

{

u.age++;

System.out,println("add-->"+u.age);//21

}

}

class User

{

int age;

public User(int i)

{

age=i

}

}

這里體現(xiàn)出了變量和引用之間的區(qū)別雀哨,引用的自加是從被指向?qū)ο蟮恼鎸?shí)地址上進(jìn)行操作磕谅,因?yàn)橐弥斜4娴氖菍?duì)象的地址。因此可以做到即使函數(shù)結(jié)束改變的量依舊被改變

而變量賦值改變僅僅是將復(fù)制的值傳給函數(shù)雾棺,并未從實(shí)際意義上改變變量的值膊夹,也就是用完就丟棄,不會(huì)重新傳給變量捌浩。

方法調(diào)用的時(shí)候放刨,關(guān)于參數(shù)傳遞問題,傳遞的時(shí)候尸饺,java只遵循一種語(yǔ)法機(jī)制进统,就是將變量中保存的“值”傳遞過去了,只不過有的時(shí)候這個(gè)值是一個(gè)字面值10浪听,有的時(shí)候是另一個(gè)Java對(duì)象的內(nèi)存地址0x1234

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末螟碎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子迹栓,更是在濱河造成了極大的恐慌掉分,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克伊,死亡現(xiàn)場(chǎng)離奇詭異叉抡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)答毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來季春,“玉大人洗搂,你說我怎么就攤上這事。” “怎么了耘拇?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵撵颊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我惫叛,道長(zhǎng)倡勇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任嘉涌,我火速辦了婚禮妻熊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仑最。我一直安慰自己扔役,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布警医。 她就那樣靜靜地躺著亿胸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪预皇。 梳的紋絲不亂的頭發(fā)上侈玄,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音吟温,去河邊找鬼序仙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溯街,可吹牛的內(nèi)容都是我干的诱桂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼呈昔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挥等!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堤尾,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肝劲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后郭宝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辞槐,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年粘室,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榄檬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衔统,死狀恐怖鹿榜,靈堂內(nèi)的尸體忽然破棺而出海雪,到底是詐尸還是另有隱情,我是刑警寧澤舱殿,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布奥裸,位于F島的核電站,受9級(jí)特大地震影響沪袭,放射性物質(zhì)發(fā)生泄漏湾宙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一冈绊、第九天 我趴在偏房一處隱蔽的房頂上張望侠鳄。 院中可真熱鬧,春花似錦焚碌、人聲如沸畦攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)知押。三九已至,卻和暖如春鹃骂,著一層夾襖步出監(jiān)牢的瞬間台盯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工畏线, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留静盅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓寝殴,卻偏偏與公主長(zhǎng)得像蒿叠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚣常,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容