1.什么是類和對象?EVERYTHING IS OBJECT(萬物皆對象)所有的事物都有兩個方面:
2.為什么要使用面向?qū)ο螅?/strong>首先,面向?qū)ο蠓先祟惪创挛锏囊话阋?guī)律。 對象的方法的實現(xiàn)細節(jié)對其他對象是屏蔽的。 我們通過類來看待對象,類是對象的抽象。 其次,采用面向?qū)ο蠓椒梢允瓜到y(tǒng)各部分各司其職、各盡所能。 對象之間的耦合性一定要低。這樣才能使每個對象本身做成最好的。 對于對象的要求:高內(nèi)聚、低耦合,這樣容易拼裝成為一個系統(tǒng)。 實現(xiàn)高內(nèi)聚就是要最大限度低提高復(fù)用性(復(fù)用性好是因為高內(nèi)聚)。可復(fù)用性是OOP的基礎(chǔ)。 3.面向過程思想和面向?qū)ο笏枷氡容^?面向過程的思想:由過程、步驟、函數(shù)組成,以過程為核心; 面向?qū)ο蟮乃枷耄阂詫ο鬄橹行?,先開發(fā)類,得到對象,通過對象之間相互通信實現(xiàn)功能。 4.實例變量和局部變量的比較
5.介紹一下對構(gòu)造函數(shù)的理解構(gòu)造方法是當(dāng)用類生成對象時,系統(tǒng)在生成對象的過程中利用的方法。
6.面向?qū)ο蠓椒ǖ闹剌d(Overloading)和覆蓋(Overriding)Overloading在一個類中可以定義多個同名方法,各個方法的參數(shù)表一定不同。但修飾詞可能相同,返回值也可能相同。 overloading是編譯時的多態(tài)。 Overriding指子類與父類之間的同名方法,參數(shù)表順序一定相同,但修飾符和返回值可能不同,構(gòu)造函數(shù)無法覆蓋。Overriding是運行時多態(tài)。
7.this關(guān)鍵字This表示當(dāng)前對象。 特別注意:用this調(diào)用其他構(gòu)造方法時,this必須為第一條語句,然后才是其他語句。
8.面向?qū)ο笕筇匦灾庋bJava中提供4個修飾符來進行對象屬性和方法的訪問權(quán)限控制:
9.面向?qū)ο笕筇匦灾^承
當(dāng)構(gòu)造一個對象的時候,系統(tǒng)先構(gòu)造父類對象,再構(gòu)造子類對象。構(gòu)造一個對象的順序:(注意:構(gòu)造父類對象的時候也是這幾步)
10.面向?qū)ο笕筇匦灾鄳B(tài)多態(tài)指的是編譯時類型不變化,而運行時類型變化。 多態(tài)分兩種:
11.修飾符staticstatic定義的是一塊為整個類共有的一塊存儲區(qū)域,其發(fā)生變化時訪問到的數(shù)據(jù)都是變化之后的。其變量可以通過類名去訪問:類名.變量名。與實例對象訪問變量為等價的。 static 可修飾屬性、方法和代碼塊:
一般情況下,主方法是靜態(tài)方法,所以可調(diào)用靜態(tài)方法,主方法為靜態(tài)方法是因為它是整個軟件系統(tǒng)的入口,而進入入口時系統(tǒng)中沒有任何對象,只能使用類調(diào)用。 覆蓋不適用于靜態(tài)方法,靜態(tài)方法不可被覆蓋。(允許在子類中定義同名靜態(tài)方法,但是沒有多態(tài),嚴(yán)格的講,方法間沒有多態(tài)就不能稱為覆蓋。
12.修飾符finalfinal可修改類、屬性、方法:
對于在構(gòu)造方法中利用final進行賦值的時候,此時在構(gòu)造之前系統(tǒng)設(shè)置的默認值相對于構(gòu)造方法失效。 常量(這里的常量指的是實例常量:即成員變量)賦值:
局部變量可以隨時賦值。 注:如果一個方法前有修飾詞private或static,則系統(tǒng)會自動在前面加上final。即private和static方法默認均為final方法。Java中使用final和static組合,聲明常量標(biāo)識符(固定語法)。final并不涉及繼承,繼承取決于類的修飾符是否為private、default、protected還是public。也就是說,是否繼承取決于這個方法對于子類是否可見。
13.抽象修飾符abstract
14.接口和抽象類的比較
15.內(nèi)部類注:所有使用內(nèi)部類的地方都可以不用內(nèi)部類,使用內(nèi)部類可以使程序更加的簡潔,便于命名規(guī)范和劃分層次結(jié)構(gòu)。內(nèi)部類是一個編譯時的概念,一旦編譯成功,就會成為完全不同的兩類。 內(nèi)部類是指在一個外部類的內(nèi)部再定義一個類。內(nèi)部類作為外部類的一個成員,并且依附于外部類而存在的。 內(nèi)部類同時具有成員和類的特性(特性不沖突)。 內(nèi)部類的分類:
a.成員內(nèi)部類作為外部類的一個成員存在,與外部類的屬性、方法并列。 內(nèi)部類和外部類的實例變量可以共存。在內(nèi)部類中訪問實例變量:this.屬性,在內(nèi)部類訪問外部類的實例變量:外部類名.this.屬性。 成員內(nèi)部類的優(yōu)點: ⑴內(nèi)部類作為外部類的成員,可以訪問外部類的私有成員或?qū)傩浴#词箤⑼獠款惵暶鳛镻RIVATE,但是對于處于其內(nèi)部的內(nèi)部類還是可見的。) ⑵用內(nèi)部類定義在外部類中不可訪問的屬性。這樣就在外部類中實現(xiàn)了比外部類的private還要小的訪問權(quán)限。 成員內(nèi)部類不可以有靜態(tài)屬性。 建立內(nèi)部類對象時應(yīng)注意: 在外部類的內(nèi)部可以直接使用inner s=new inner();(因為外部類知道inner是哪個類,所以可以生成對象。)而在外部類的外部,要生成(new)一個內(nèi)部類對象,需要首先建立一個外部類對象(外部類可用),然后在生成一個內(nèi)部類對象。 Outer outer = new Outer; Outer.Inner in=outer.new Inner(); 錯誤的定義方式: Outer.Inner in=new Outer.Inner()。 注意:當(dāng)Outer是一個private類時,外部類對于其外部訪問是私有的,所以就無法建立外部類對象,進而也無法建立內(nèi)部類對象。 b.局部內(nèi)部類在方法中定義的內(nèi)部類稱為局部內(nèi)部類。與局部變量類似,在局部內(nèi)部類前不加修飾符public和private,其范圍為定義它的代碼塊。 注意:局部內(nèi)部類不僅可以訪問外部類實例變量,還可以訪問外部類的局部變量(但此時要求外部類的局部變量必須為final)?? 在類外不可直接生成局部內(nèi)部類(保證局部內(nèi)部類對外是不可見的)。 要想使用局部內(nèi)部類時需要生成對象,對象調(diào)用方法,在方法中才能調(diào)用其局部內(nèi)部類。 c.靜態(tài)內(nèi)部類注意:前三種內(nèi)部類與變量類似,所以可以對照參考變量,靜態(tài)內(nèi)部類定義在類中,任何方法外,用static定義。 靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員。 生成(new)一個靜態(tài)內(nèi)部類不需要外部類成員:這是靜態(tài)內(nèi)部類和成員內(nèi)部類的區(qū)別。 靜態(tài)內(nèi)部類的對象可以直接生成:Outer.Inner in=new Outer.Inner(); 而不需要通過生成外部類對象來生成。這樣實際上使靜態(tài)內(nèi)部類成為了一個頂級類。 靜態(tài)內(nèi)部類不可用private來進行定義。 注意:當(dāng)類與接口(或者是接口與接口)發(fā)生方法命名沖突的時候,此時必須使用內(nèi)部類來實現(xiàn)。用接口不能完全地實現(xiàn)多繼承,用接口配合內(nèi)部類才能實現(xiàn)真正的多繼承。 d. 匿名內(nèi)部類匿名內(nèi)部類是一種特殊的局部內(nèi)部類,它是通過匿名類實現(xiàn)接口。 注:一個匿名內(nèi)部類一定是在new的后面,用其隱含實現(xiàn)一個接口或?qū)崿F(xiàn)一個類,沒有類名,根據(jù)多態(tài),我們使用其父類名。 因其為局部內(nèi)部類,那么局部內(nèi)部類的所有限制都對其生效。 匿名內(nèi)部類是唯一一種無構(gòu)造方法類。 匿名內(nèi)部類在編譯的時候由系統(tǒng)自動起名Out$1.class。 如果一個對象編譯時的類型是接口,那么其運行的類型為實現(xiàn)這個接口的類。因匿名內(nèi)部類無構(gòu)造方法,所以其使用范圍非常的有限。 15、運行時異常與普通異常異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。 Throwable是所有Java程序中錯誤處理的父類,有兩種資類:Error和Exception。
16、Java命名規(guī)范必須以英文字母、下劃線(’_’)或’$’開始,其余可以有數(shù)字但不允許包含空格,且組合后的名稱不能是Java關(guān)鍵字或保留字。
|
|