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