(基本概念、對象和類、構(gòu)造器、static)
一、基本概念
面向?qū)ο笫?b>站在對象的角度思考問題,把多個功能合理的放到不同對象里,強(qiáng)調(diào)的是具備某些功能的對象。具備某種功能的實體,稱為對象。面向?qū)ο笞钚〉某绦騿卧?類.
面向?qū)ο笕筇卣鳎?/b>
1:封裝(Encapsulation):將對象的實現(xiàn)細(xì)節(jié)隱藏起來,通過公共的方法來向外暴露該對象的功能。
2:繼承(Inheritance):子類繼承父類,子類是一種特殊的父類,能直接或間接獲得父類里的成員。
3:多態(tài)(Polymorphism):直接把子類對象賦給父類變量,但是運(yùn)行時依然表現(xiàn)出子類的行為特征,這意味著同一類型的對象在運(yùn)行時可能表現(xiàn)出不同的行為特征。
千萬不要誤解為面向?qū)ο笠欢ň蛢?yōu)于面向過程的設(shè)計
簡單的說:編碼是人的工作,面向?qū)ο蟾舆m合人,而面向過程更適合計算機(jī)。
二、對象和類
對象可以定義成包含狀態(tài)和行為的一個實體,對象(object)也稱為實例(instance)。
具有相同特性(狀態(tài))和行為(功能)的對象的抽象就是類。
對象是類的實例,類是對象的模板。
類具有特性,對象的狀態(tài),用成員變量來描述,封裝數(shù)據(jù)。
類具有功能,對象的行為,用方法來描述。
1、類相關(guān)

類的全限定名稱: 包名.類名;
2、對象
1):根據(jù)類來創(chuàng)建對象的語法:? ? 類名? 變量? =? new? 類名();
2):給字段設(shè)置值:????????????????????????對象變量.字段名 = 該類型的值;
3):獲取字段的值:????????????????????????該字段類型? 變量 = 對象變量.字段值;
4):通過對象調(diào)用方法. ? ? ? ? ? ? ? ?對象變量.方法(實參);

對象的打印和比較對象以及匿名對象和對象的生命周期:
-------------------------------------------------------------
1):對象的打印操作:
? ? 打印對象的時候,打印出來的效果,如:Servant@3294e4f4.
? ? 類的名稱@十六進(jìn)制的hashCode.
? ? 其實,我們打印對象,往往關(guān)系的是該對象中的數(shù)據(jù)是多少,期待講解Obejct的toString方法.
2):對象比較操作:
? ? ==號:對于基本數(shù)據(jù)類型來說,比較的是值.
? ? ? ? ? ? ? 對于引用數(shù)據(jù)類型來說,比較的是在內(nèi)存中的地址值.
? ? ? ? ? ? ? ? 每次使用new關(guān)鍵字,都表示在堆值新開辟一塊內(nèi)存空間,不同的內(nèi)存空間,地址值不同.
? ? 需求:如果對象擁有完全相同的數(shù)據(jù),我就想讓他們相等. 期待:Object的equals方法.
3):對象的生命周期:
? ? 對象什么時候出生:每次使用new關(guān)鍵字的時候,就會在內(nèi)存開辟新的空間,此時對象開始存在.
? ? 對象的結(jié)束:當(dāng)堆中的對象,沒有被任何變量所引用,此時該對象就成了垃圾,就等著垃圾回收器(GC)來回收該垃圾,當(dāng)被回收的時候,對象被銷毀了,回收垃圾的目的,釋放更多的內(nèi)存空間.
4):匿名對象: 沒有名稱的對象,創(chuàng)建對象之后沒有賦給某一個變量.
? ? ? new Servant();//匿名對象,匿名對象只是在堆中開辟一塊新的內(nèi)存空間,但是沒有把該空間地址賦給任何變量.
? ? ? 因為沒有名稱,匿名對象僅僅只能使用一次,一般的,把匿名對象作為方法的實參傳遞.
三、構(gòu)造器

構(gòu)造器:如果我們沒有顯示提供構(gòu)造器,則編譯器在編譯時創(chuàng)建一個缺省的構(gòu)造器.
但是,如果我們顯示定義了一個構(gòu)造器,則編譯器不再創(chuàng)建默認(rèn)構(gòu)造器.
構(gòu)造器是一種特殊的方法,也可以存在重載.
四、static
static修飾的資源屬于類級別,而不是對象級別。
static修飾符的特點:
1):static修飾的成員(字段/方法),隨著所在類的加載而加載. 當(dāng)JVM把字節(jié)碼加載進(jìn)JVM的時候,static修飾的成員已經(jīng)在內(nèi)存中存在了.
2):優(yōu)先于對象的存在. 對象是我們手動通過new關(guān)鍵字創(chuàng)建出來的.
3):satic修飾的成員被該類型的所有對象所共享. 根據(jù)該類創(chuàng)建出來的任何對象,都可以訪問static成員.
表面上通過對象去訪問static成員,其本質(zhì)依然使用類名訪問,和對象沒有任何關(guān)系(通過反編譯看到的).
4):直接使用類名訪問static成員 因為static修飾的成員直接屬于類,不屬于對象,所以可以直接使用類名訪問static成員.
什么時候定義成static的字段和方法:
? 如果這個一個狀態(tài)/行為屬于整個事物(類),就直接使用static修飾. 被所有對象所共享.
? 在開發(fā)中,往往把工具方法使用static修飾.(工具對象只需要一份即可,把該類設(shè)計為單例的)