從屌絲到架構(gòu)師的飛越(面向?qū)ο笃?對(duì)象的應(yīng)用

一勇皇、介紹

對(duì)象(object)是一件事、一個(gè)實(shí)體焚刺、一個(gè)名詞敛摘,可以獲得的東西,可以想象有自己的標(biāo)識(shí)的任何東西乳愉。對(duì)象是類的實(shí)例化兄淫。一些對(duì)象是活的,一些對(duì)象不是蔓姚。比如這輛汽車捕虽、這個(gè)人、這間房子坡脐、這張桌子薯鳍、這株植物、這張支票挨措、這件雨衣挖滤。 概括來(lái)說(shuō)就是:萬(wàn)物皆對(duì)象。對(duì)象需要由兩部分來(lái)描述:第一部分是它的“數(shù)據(jù)”浅役,包括對(duì)象的特性斩松、狀態(tài)等靜態(tài)信息;第二部分是它的“行為”觉既,包括該對(duì)象的操作惧盹、功能等能動(dòng)信息乳幸。

那么這節(jié)課呢,我們來(lái)了解的是對(duì)象的相關(guān)應(yīng)用钧椰,告訴我們?nèi)绾稳ナ褂梦覀儗?duì)象的屬性與方法粹断,比如我們有一個(gè)人類,他產(chǎn)生了一個(gè)對(duì)象張三嫡霞,那么我們就可以通過(guò)張三去使用張三的名字瓶埋,年齡等他的一些特性,除了這個(gè)以外诊沪,我們還會(huì)對(duì)張三的行為進(jìn)行引用养筒,如:唱歌,踢球端姚,玩游戲等晕粪。

二、知識(shí)點(diǎn)介紹

1渐裸、對(duì)象存儲(chǔ)

2巫湘、對(duì)象使用

3、對(duì)象生命周期

4昏鹃、對(duì)象比較

5剩膘、匿名對(duì)象

三、上課對(duì)應(yīng)視頻的說(shuō)明文檔

1盆顾、對(duì)象的存儲(chǔ)

對(duì)象的存儲(chǔ)在內(nèi)存中有地址與值,那么地址與值是使用棧與堆的形式存儲(chǔ)畏梆。那么我們先了解一下堆您宪,棧。

棧(stack)與堆(heap)都是Java用來(lái)在Ram中存放數(shù)據(jù)的地方奠涌。與C++不同宪巨,? Java自動(dòng)管理?xiàng):投眩绦騿T不能直接地設(shè)置椓锍或堆捏卓。

棧的優(yōu)勢(shì)是,存取速度比堆要快慈格,僅次于直接位于CPU中的寄存器怠晴。但缺點(diǎn)是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的浴捆,缺乏靈活性蒜田。另外,棧數(shù)據(jù)可以共享选泻。

堆的優(yōu)勢(shì)是可以動(dòng)態(tài)地分配內(nèi)存大小冲粤,生存期也不必事先告訴編譯器美莫,Java的垃圾收集器會(huì)自動(dòng)收走這些不再使用的數(shù)據(jù)。但缺點(diǎn)是梯捕,由于要在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存厢呵,存取速度較慢。

案例:

//堆是先進(jìn)先出,棧是先進(jìn)后出

Person p1=new Person();

如上圖:當(dāng)我們聲明完p1對(duì)象后傀顾,在內(nèi)存棧中襟铭,我們可以查看到p1的地址,在內(nèi)存堆中锣笨,我們可以看到我們類中的屬性與方法蝌矛。在使用對(duì)象時(shí),我們是先找到對(duì)象的棧地址错英,在找到堆中的實(shí)際內(nèi)容入撒。

(1) 基本類型

如上圖:當(dāng)我們聲明變量a時(shí),只是在內(nèi)存棧中開辟了一個(gè)直接存放內(nèi)容的空間椭岩。

(2) 引用類型

如上圖:當(dāng)我們聲明p對(duì)象時(shí)茅逮,在我們的內(nèi)存棧中,我們存入了對(duì)象的地址判哥,而這個(gè)地址献雅,指向的是我們內(nèi)存堆中的實(shí)際屬性,name和sex塌计,也就是說(shuō)挺身,我們通過(guò)內(nèi)存棧中的地址也就是對(duì)象,可以找到內(nèi)存堆中的name和sex這二個(gè)屬性的值“小明”和“boy”

2锌仅、對(duì)象的使用

創(chuàng)建新的對(duì)象之后,我們就可以使用“ 對(duì)象名.對(duì)象成員 ”的格式章钾,來(lái)訪問(wèn)對(duì)象的成員(包括屬性和方法)。

案例:

class TestPerson{

public static void main(String[] args){

Person p1 = new Person();

Person p2 =new Person();

p1.age = -30;

//不同的對(duì)象打印热芹,不同的值

p1.shout();?

p2.shout();

}

}

class Person{

int age=23;

public void shout(){

System.out.println(age);

}

}

如上例:在我們的主函數(shù)里贱傀,聲明了p1,p2二個(gè)對(duì)象,p1伊脓,p2對(duì)象分別在我們的內(nèi)存中開辟了二個(gè)不同的空間府寒,那么當(dāng)p1中的屬性age發(fā)生變化的時(shí)候,p2里面的age是不會(huì)受到影響的报腔。那么最后調(diào)用shout()方法的時(shí)候株搔,我們輸出的結(jié)果是p1的age是-30和p2的age是23。

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

格式:

類名 對(duì)象名稱 = null;? ? ? ? //聲明對(duì)象?

對(duì)象名稱 = new 類型();? ? ? ? //實(shí)例化對(duì)象

class Person?

{?

String name;? ? ? ? ? ? ? ? ? ? ? ? //聲明姓名屬性?

int age;? ? ? ? ? ? ? ? ? ? ? ? ? ? //聲明年齡屬性?

public void tell()? ? ? ? ? ? ? ? ? //取得信息的方法?

{?

System.out.println("姓名:" + name + "纯蛾,年齡:" + age);? ? ? ? ?

}?

}?

public class ClassDemo02?

{?

public static void main(String[] args)?

{?

Person per = new person();? ? ? //創(chuàng)建并實(shí)例化對(duì)象?

}?

}?

(2) 訪問(wèn)屬性與方法

格式:

訪問(wèn)屬性:對(duì)象名稱.屬性名?

訪問(wèn)方法:對(duì)象名稱.方法名()?

class Person?

{?

String name;? ? ? ? ? ? ? ? ? ? ? ? //聲明姓名屬性?

int age;? ? ? ? ? ? ? ? ? ? ? ? ? ? //聲明年齡屬性?

public void tell()? ? ? ? ? ? ? ? ? //取得信息的方法?

{?

System.out.println("姓名:" + name + "邪狞,年齡:" + age);? ? ? ? ?

}?

}?

public class ClassDemo03?

{?

public static void main(String args[])?

{?

Person per = new Person();? ? ? ? ? ? ? //創(chuàng)建并實(shí)例化對(duì)象(非常重要)? ? ? ? ?

per.name = "張三";? ? ? ? ? ? ? ? ? ? //為name屬性賦值?

per.age = 30;? ? ? ? ? ? ? ? ? //為age屬性賦值?

per.tell();? ? ? ? ? ? ? ? ? ? //調(diào)用類中的方法?

}?

}?

3、對(duì)象的生命周期

(1)程序結(jié)束時(shí)茅撞,所有對(duì)象都回收

如上圖:產(chǎn)生了一個(gè)p1對(duì)象帆卓,當(dāng)整個(gè)程序結(jié)束執(zhí)行時(shí)巨朦,p1對(duì)象變成了垃圾,結(jié)束了他的生命周期剑令。

(2)當(dāng)對(duì)象為null時(shí)糊啡,對(duì)象變成垃圾

A、

如上圖:產(chǎn)生了一個(gè)p1對(duì)象吁津,在程序的運(yùn)行過(guò)程當(dāng)中棚蓄,p1賦值了null,那么p1在內(nèi)存棧中的地址就消失了,失去了地址的對(duì)象就變成了垃圾碍脏,等待著JVM的垃圾回收梭依。

B、

如上圖:產(chǎn)生了一個(gè)p1對(duì)象典尾,將p1對(duì)象的地址給了p2,表示的是p1和p2同時(shí)擁有了同一個(gè)地址役拴,他們同時(shí)指向了我們內(nèi)存堆中的內(nèi)容,當(dāng)我們把p1的地址賦什為null時(shí)钾埂,p2是不受影響的河闰,所以,p1變成了垃圾對(duì)象褥紫,而p2還是可以正常使用姜性。

4、對(duì)象的比較

A髓考、“= =”運(yùn)算符 部念,用于比較兩個(gè)變量(基本數(shù)據(jù)類型和引用數(shù)據(jù)類型變量)的值是否相等。

public class Test1{

public static void main(String args[]){

String s1=new String("abc");//產(chǎn)生字符串對(duì)象

String s2=new String("abc");

String s3=s1;//將s1的地址給了s3所以他二地址一樣

if(s1==s2){//比較具體的地址

System.out.pirntln("s1==s2");

}else{

System.out.println("s1!=s2");

}

if(s1==s3){

System.out.println("s1==s3");

}else{

System.out.println("s1!=s3");

}

}

}

B氨菇、equals()方法是String 類的一個(gè)成員方法儡炼,用于比較兩個(gè)引用變量所指向的對(duì)象的內(nèi)容是否相等。

public class Test1{

public static void main(String args[]){

String s1=new String("abc");

String s2=new String("abc");

String s3=s1;

if(s1.equals(s2)){//比較具體的值

System.out.println("s1==s2");

}else{

System.out.println("s1!=s2");

}

if(s1.equals(s3)){

System.out.println("s1==s3");

}else{

System.out.println("s1!=s3");

}

}

}

5门驾、匿名對(duì)象

創(chuàng)建完對(duì)象后,在調(diào)用該對(duì)象的方法時(shí)多柑,可以不定義對(duì)象的引用變量奶是,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫匿名對(duì)象竣灌。

Person p=new Person();

P. shout();

<=====>

new Person().shout();

匿名對(duì)象使用:

如果一個(gè)對(duì)象只需要一次方法調(diào)用聂沙,那么就可以使用匿名對(duì)象。

將匿名對(duì)象作為實(shí)參傳遞給一個(gè)函數(shù)調(diào)用初嘹,比如程序中有一個(gè)getSomeOne 函數(shù)及汉,要接收一個(gè)Person類對(duì)象作為參數(shù),函數(shù)定義如下:

public static void getSomeOne(Person p){

...

}

函數(shù)調(diào)用:

getSomeOne(new Person());

案例:

需求:將小汽車改裝成3個(gè)輪子的黑車屯烦。

1:汽車類坷随。

2:汽車修理廠

/*

匿名對(duì)象

匿名信

修黑車

汽車類

黑車廠類

把汽車的改成黑色3輪車房铭。

*/?

//汽車類

class Car {?

String name = "smart";? //名字

String color = "red";? //顏色

int num = 4;? //輪胎數(shù)量

void run() {?

System.out.println(name + ":" + color + ":" + num + ":跑起來(lái)了。温眉。缸匪。。");?

}?

}?

//改車工廠

class BlackCarFactory {?

String name;? //工廠名字

String addr;? //工廠地址

Car repairCar(Car c) {? //將車改成黑色类溢,3輪

c.num = 3;?

c.color = "黑色";?

System.out.println("改裝成功啦凌蔬。。闯冷。");

return c;?

}?

}?

//主函數(shù)

class Demo1 {?

public static void main(String[] args) {?

BlackCarFactory bcf = new BlackCarFactory();? //產(chǎn)生一個(gè)改車工廠對(duì)象

bcf.name = "幸福修理廠";?

bcf.addr = "天河區(qū)棠東東路御富科貿(mào)園a棟206";?

// 非匿名對(duì)象?

Car c = new Car();? //產(chǎn)生一汽車對(duì)象

c.run();? //運(yùn)行起來(lái)

// 跑到改車工廠砂心,將車傳入,進(jìn)行改裝?

bcf.repairCar(c);?

// 改裝完成蛇耀,取車辩诞,在運(yùn)行?

c.run();?

// 匿名對(duì)象一,只使用一次:?

// 如下創(chuàng)建了2個(gè)對(duì)象?

/*

* new Car().run();

*?

* new Car().run();

*/?

// 匿名對(duì)象二,作為實(shí)際參數(shù)傳遞?

Car c2 = bcf.repairCar(new Car()); //直接將車送進(jìn)改裝工廠

c2.run();? //改裝完后運(yùn)行

System.out.println();?

}?

}?

總結(jié):

1. 匿名對(duì)象設(shè)置的屬性永遠(yuǎn)無(wú)法獲鹊僦稀躁倒?? 沒(méi)有引用變量指向那個(gè)對(duì)象。

2. 任何兩個(gè)匿名對(duì)象使用==比較洒琢,永遠(yuǎn)返回false秧秉。

3.? 匿名對(duì)象主要應(yīng)用于實(shí)參。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衰抑,一起剝皮案震驚了整個(gè)濱河市象迎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呛踊,老刑警劉巖砾淌,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)措左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門朵诫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了衷戈?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)层坠。 經(jīng)常有香客問(wèn)我殖妇,道長(zhǎng),這世上最難降的妖魔是什么破花? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任谦趣,我火速辦了婚禮疲吸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔚润。我一直安慰自己磅氨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布嫡纠。 她就那樣靜靜地躺著烦租,像睡著了一般。 火紅的嫁衣襯著肌膚如雪除盏。 梳的紋絲不亂的頭發(fā)上叉橱,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音者蠕,去河邊找鬼窃祝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踱侣,可吹牛的內(nèi)容都是我干的粪小。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抡句,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼探膊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起待榔,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逞壁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后锐锣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腌闯,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年雕憔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姿骏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斤彼,死狀恐怖分瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畅卓,我是刑警寧澤擅腰,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布蟋恬,位于F島的核電站翁潘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏歼争。R本人自食惡果不足惜拜马,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一渗勘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俩莽,春花似錦旺坠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至出刷,卻和暖如春璧疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馁龟。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工崩侠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坷檩。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓却音,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親矢炼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子系瓢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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