一紧憾、了解面向?qū)ο?br>
? ? ? 面向?qū)ο螅阂环N基于面向過(guò)程的新的編程思想,顧名思義該思想是站在對(duì)象的角度思考問(wèn)題昌渤,我們把多個(gè)功能合理的放到不同對(duì)象里赴穗,強(qiáng)調(diào)的是具備某些功能的對(duì)象。
三大特征:
? ? ? ? ? 封裝(Encapsulation)膀息;封裝是指將對(duì)象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)般眉,然后通過(guò)公共的方法來(lái)向外暴露該對(duì)象的功能。?
繼承(Inheritance)潜支;繼承是面向?qū)ο髮?shí)現(xiàn)軟件復(fù)用的重要手段甸赃,當(dāng)子類繼承父類后,子類是一種特殊的父類毁腿,能直接或間接獲得父類里的成員辑奈。
? ? ? ? ?多態(tài)(Polymorphism)苛茂;多態(tài)是可以直接把子類對(duì)象賦給父類變量,但是運(yùn)行時(shí)依然表現(xiàn)出子類的行為特征鸠窗,這意味著同一類型的對(duì)象在運(yùn)行時(shí)可能表現(xiàn)出不同的行為特征妓羊。
? ? ? ? ?類:類是對(duì)象的類型/模板。創(chuàng)建一個(gè)對(duì)象稍计,就是使用一個(gè)類作為構(gòu)建該對(duì)象的基礎(chǔ)躁绸。
? ? ? ? ? ? 具有相同特性(數(shù)據(jù)元素)和相同行為(功能)的對(duì)象的抽象就是類。因此臣嚣,對(duì)象的抽象是類净刮,類的具體化就是對(duì)象,也可以說(shuō)類的實(shí)例是對(duì)象硅则,類實(shí)際上就是一種數(shù)據(jù)類型淹父。
? ? ? ? ? ?類具有特性,對(duì)象的狀態(tài)怎虫,用成員變量來(lái)描述暑认。
? ? ? ? ? ?類具有功能,對(duì)象的行為大审,用方法來(lái)描述蘸际。
? ? ? ? ? ?類和對(duì)象之間的關(guān)系:
? ? ? ? ? ? ? ? ? ? ?類是對(duì)象的描述,類是對(duì)象的類型,類是對(duì)象的圖紙模板.
? ? ? ? ? ? ? ? ? ? ?對(duì)象是類,具體的一個(gè)個(gè)體.是根據(jù)類創(chuàng)建出來(lái)的.
? ? ? ? ? ? 定義類的注意事項(xiàng):
? ? ? ? ? ? ? ? ? ? ? ? 1:類名使用名詞或者名詞短語(yǔ),使用駝峰表示法(后面的每個(gè)單詞首字母大寫).
? ? ? ? ? ? ? ? ? ? ? ? ? 比如:Employee,StudentInfo,
? ? ? ? ? ? ? ? ? ? ? ?2:類名首字母大寫,使用標(biāo)識(shí)符.
? ? ? ? ? ? ? ? ? ? ? ?3:如果類使用了public修飾,則當(dāng)前類所在的文件名稱也必須為該類名.
------------------------------------------------------------------------------------------------------------
? ? ? ? ? ?在面向?qū)ο蟮恼n程中:
? ? ? ? ? ? ? ? ? ? ? ? 描述對(duì)象的類,不需要定義main方法的.
? ? ? ? ? ? ? ? ? ? ? ?測(cè)試類才應(yīng)該具有主方法,測(cè)試類用于創(chuàng)建對(duì)象,操作對(duì)象.
? ? ? ? ? ? ? ? ? ? ? ? ?一般的,我們讓測(cè)試類名和文件名相同.
? ? ? ? ? ? ? ? 對(duì)象的基本操作:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1):如何根據(jù)一個(gè)類創(chuàng)建對(duì)象,此時(shí)得使用關(guān)鍵字new?.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?類名????變量=?new類名();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new關(guān)鍵字:1):在堆內(nèi)存中開(kāi)辟一塊空間,2):創(chuàng)建了一個(gè)對(duì)象.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 每次使用new關(guān)鍵字,都表示在堆中新開(kāi)辟一塊內(nèi)存空間.
? ? ? ? ? ? ? ? ? ? ? ? 2):匿名對(duì)象,沒(méi)有名稱的一個(gè)對(duì)象,因?yàn)闆](méi)有名稱,匿名對(duì)象就只能使用一次:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?new類名();如,?new??Servant();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一般而言,我們不會(huì)使用匿名對(duì)象,我們會(huì)把創(chuàng)建的對(duì)象賦值給一個(gè)變量,此時(shí)該對(duì)象就不是匿名對(duì)象了,該變量名就好比是對(duì)象的名稱.
? ? ? ? ? ? ? ? ? ? ? ? ? ?3):打印對(duì)象的時(shí)候,默認(rèn)打印出的是對(duì)象的hashCode值。
? ? ? ? ? ? ? ? ? ? ? ? ? ?4):使用對(duì)象調(diào)用對(duì)象的方法.
? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果對(duì)象中的方法,沒(méi)有使用static修飾符,就只能使用當(dāng)前方法所在類的對(duì)象來(lái)調(diào)用,不能直接使用類名調(diào)用.例如:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Servant?s1?=?new??Servant();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s1.cooking();
? ? ? ? ? ? ? ? ? 6):使用對(duì)象來(lái)操作成員變量.
? ? ? ? ? ? ? ? ? ? ? ? ? 給對(duì)象的成員變量設(shè)置值:
? ? ? ? ? ? ? ? ? ? ? ? ?給菲傭s1設(shè)置一個(gè)名字?如:s1.name?=?"張三";
? ? ? ? ? ? ? ? ? ? ? ? ?獲取對(duì)象的成員變量的值:
? ? ? ? ? ? ? ? ? ? ? ? 獲取s1對(duì)象的姓名:String??n?=?s1.name;
? ? ? ? ? ? ? ? ? ? ? ?定義一個(gè)Cat類,包含了name和age狀態(tài),以及sleep,eat行為.
? ? ? ? ? ? ? ? ? ? ? 創(chuàng)建三個(gè)Cat對(duì)象:??c1,c2,c3
? ? ? ? ? ? ? ? ? ? ?分析內(nèi)存
二徒扶、構(gòu)造器
構(gòu)造器的作用:
? ? ? ? ? ? ? ?構(gòu)造器最重要的功能就是創(chuàng)建對(duì)象,分配內(nèi)存空間,并完成對(duì)象的初始化操作粮彤。
? ? ? ? ? ? ? ? 一旦創(chuàng)建對(duì)象就會(huì)調(diào)用與之對(duì)應(yīng)的構(gòu)造器,構(gòu)造器的作用:可用于創(chuàng)建實(shí)例象和完成實(shí)例初始化時(shí)內(nèi)存分配姜骡。
? ? ? ? ? ? ? ?構(gòu)造器的特點(diǎn):
? ? ? ? ? ? ? 1.構(gòu)造方法名稱與類名相同:
? ? ? ? ? ? ?2.不用定義返回值類型:
? ? ? ? ? ? ? ? ? ? ? ? ?因?yàn)榉祷刂档念愋涂隙ň褪沁@個(gè)類型本身,也不能使用void.导坟。
? ? ? ? ? ? ? 3.不需要寫return語(yǔ)句:
? ? ? ? ? ? ? ? ? ? ?但實(shí)際效果是調(diào)用后把創(chuàng)建好的對(duì)象返回。
? ? ? ? ? ? ? ? 即使我們沒(méi)有手動(dòng)提供構(gòu)造器,編譯器也會(huì)提供默認(rèn)構(gòu)造器,每一個(gè)類,至少有一個(gè)構(gòu)造器.
? ? ? ? ? ? ? ? ? ?如果我們手動(dòng)提供了構(gòu)造器,則編譯器不載提供默認(rèn)構(gòu)造器.
三溶浴、static關(guān)鍵字修飾.
static修飾成員變量:該變量屬于整個(gè)類,不屬于某一個(gè)具體對(duì)象.
static修飾的方法:該方法屬于整個(gè)類,不屬于某一個(gè)具體的對(duì)象.
沒(méi)有使用static修飾的成員變量/方法,就屬于某一個(gè)對(duì)象.
使用static修飾的成員(變量,方法,內(nèi)部類),稱之為類的成員.
特點(diǎn):
1):隨著JVM的加載而加載.
當(dāng)JVM把static成員所在的字節(jié)碼加載進(jìn)JVM的時(shí)候,static就已經(jīng)存在于JVM中(方法區(qū)).
2):優(yōu)先于對(duì)象存在.
對(duì)象是我們通過(guò)new關(guān)鍵字創(chuàng)建出來(lái)的,而靜態(tài)成員,在加載進(jìn)JVM就已經(jīng)存在了.
3):被所有當(dāng)前這個(gè)類的對(duì)象所共享.
4):調(diào)用靜態(tài)成員,直接使用類名調(diào)用即可.
靜態(tài)成員屬于類型,而不屬于某一個(gè)具體的對(duì)象.
即使我們使用對(duì)象.靜態(tài)成員,其底層依然是類名.靜態(tài)成員.
使用static修飾的字段不是存儲(chǔ)在堆內(nèi)存的乍迄,而是存儲(chǔ)在獨(dú)立于堆內(nèi)存和棧內(nèi)存的方法區(qū)內(nèi)存中,可以被該類所有的對(duì)象所共享士败。
類成員:使用static修飾的成員變量,方法,內(nèi)部類.
實(shí)例成員:沒(méi)有使用static修飾的成員變量,方法,內(nèi)部類.
在實(shí)際開(kāi)發(fā)中,我們往往不會(huì)使用static去修飾成員變量和方法,使用static的幾個(gè)地方:
1:靜態(tài)代碼塊:
static{
初始化數(shù)據(jù)
}
2:定義全局的公共常量的時(shí)候使用.
public??static?final??int??MAX_VALUE?=?127;//表示一個(gè)常量值,不能改變,大家可以共用.
3:工具類中的方法,使用static修飾,目的:方便調(diào)用(使用最多的情況).
四、equals與==
equals:一般用在比較當(dāng)前對(duì)象和指定對(duì)象比較褥伴,表示邏輯相等(比較值)谅将。
==:一般是用來(lái)判斷兩個(gè)對(duì)象的引用內(nèi)存地址是否相同(比較地址)。