java面向?qū)ο蠡A(chǔ)增強(qiáng)_第1頁
java面向?qū)ο蠡A(chǔ)增強(qiáng)_第2頁
java面向?qū)ο蠡A(chǔ)增強(qiáng)_第3頁
java面向?qū)ο蠡A(chǔ)增強(qiáng)_第4頁
java面向?qū)ο蠡A(chǔ)增強(qiáng)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 JDK5新特性l 自動裝箱和拆箱 l 泛型 l 增強(qiáng)for循環(huán) l 靜態(tài)導(dǎo)入 l 可變參數(shù) l 枚舉 2 枚舉l 枚舉概述 是指將變量的值一一列出來,變量的值只限于列舉出來的值的范圍內(nèi)。舉例:一周只有7天,一年只有12個(gè)月等。 回想單例設(shè)計(jì)模式:單例類是一個(gè)類只有一個(gè)實(shí)例 那么多例類就是一個(gè)類有多個(gè)實(shí)例,但不是無限個(gè)數(shù)的實(shí)例,而是有限個(gè)數(shù)的實(shí)例。這才能是枚舉類。 l 通過自己定義一個(gè)枚舉類來演示案例 第一版 第二版 第三版 發(fā)現(xiàn)自己定義一個(gè)枚舉類,比較麻煩,所以,java就提供了枚舉類供我們使用。 格式是:只有枚舉項(xiàng)的枚舉類l public enum 枚舉類名 枚舉項(xiàng)1,枚舉項(xiàng)2,枚舉項(xiàng)3

2、; l l 注意事項(xiàng) l 定義枚舉類要用關(guān)鍵字enum l 所有枚舉類都是Enum的子類 l 枚舉類的第一行上必須是枚舉項(xiàng),最后一個(gè)枚舉項(xiàng)后的分號是可以省略的,但是如果枚舉類有其他的東西,這個(gè)分號就不能省略。建議不要省略 l 枚舉類可以有構(gòu)造器,但必須是private的,它默認(rèn)的也是private的。枚舉項(xiàng)的用法比較特殊:枚舉(“”);l 枚舉類也可以有抽象方法,但是枚舉項(xiàng)必須重寫該方法 枚舉在switch語句中的使用/第一版/這就是枚舉類/public enum Direction / 枚舉項(xiàng)/FRONT, BEHIND, LEFT, RIGHT;/ /第二版/public enum Dir

3、ection / 枚舉項(xiàng)/FRONT("前"), BEHIND("后"), LEFT("左"), RIGHT("右");/private String name;/ 默認(rèn)是private的/private Direction() /private Direction(String name) / = name;/public String getName() /return name;/ /第三版public enum Direction / 枚舉項(xiàng)FRONT("前") Ove

4、rridepublic void show() System.out.println("前");,BEHIND("后") Overridepublic void show() System.out.println("后");,LEFT("左") Overridepublic void show() System.out.println("左");,RIGHT("右") Overridepublic void show() System.out.println("右&

5、quot;);private String name;/ 默認(rèn)是private的private Direction() private Direction(String name) = name;public String getName() return name;public abstract void show();Direction d = Direction.FRONT;System.out.println(d.getName();d.show();3 枚舉類中的幾個(gè)常見方法l int compareTo(E o)l String name()l int ordi

6、nal()l String toString() l <T> T valueOf(Class<T> type,String name)l values() 此方法雖然在JDK文檔中查找不到,但每個(gè)枚舉類都具有該方法,它遍歷枚舉類的所有枚舉值非常方便4 JDK7新特性l 二進(jìn)制字面量 l 數(shù)字字面量可以出現(xiàn)下劃線 l switch 語句可以用字符串 l 泛型簡化 l 異常的多個(gè)catch合并 l try-with-resources 語句8 二進(jìn)制字面量l JDK7開始,終于可以用二進(jìn)制來表示整數(shù)(byte,short,int和long)。使用二進(jìn)制字面量的好處是,可以使

7、代碼更容易被理解。語法非常簡單,只要在二進(jìn)制數(shù)值前面加 0b或者0Bl 舉例: int x = ob110110 9數(shù)字字面量可以出現(xiàn)下劃線l 為了增強(qiáng)對數(shù)值的閱讀性,如我們經(jīng)常把數(shù)據(jù)用逗號分隔一樣。JDK7提供了_對數(shù)據(jù)分隔。 l 舉例: int x = 100_1000;l 注意事項(xiàng): 不能出現(xiàn)在進(jìn)制標(biāo)識和數(shù)值之間 不能出現(xiàn)在數(shù)值開頭和結(jié)尾 不能出現(xiàn)在小數(shù)點(diǎn)旁邊 l int a = 0b100_100;l int b = 0b_100_100; l int c = 0b100_100_; l float d = 12.34_56f;l float e = 12._34_56f;10 swi

8、tch 語句可以用字符串l switch 語句可以用字符串 在switch語句中已經(jīng)演示過了,還可以繼續(xù)演示一次11 泛型簡化l 泛型簡化 在集合中講解泛型的時(shí)候已經(jīng)演示過了,還可以在演示一下 12 異常的多個(gè)catch合并l 異常的多個(gè)catch合并 在異常的時(shí)候,已經(jīng)講演示了,還可以在演示一下 13 try-with-resources 語句l 格式: try(必須是java.lang.AutoCloseable的子類對象) 好處: 資源自動釋放,不需要close()了 把需要關(guān)閉資源的部分都定義在這里就ok了 主要是流體系的對象是這個(gè)接口的子類(看JDK7的API) 14 面向?qū)ο笏枷朐O(shè)

9、計(jì)原則 在實(shí)際的開發(fā)中,我們要想更深入的了解面向?qū)ο笏枷?,就必須熟悉前人總結(jié)過的面向?qū)ο蟮乃枷氲脑O(shè)計(jì)原則 單一職責(zé)原則 開閉原則 里氏替換原則 依賴注入原則 接口分離原則 迪米特原則 15 面向?qū)ο笏枷朐O(shè)計(jì)原則l 單一職責(zé)原則 其實(shí)就是開發(fā)人員經(jīng)常說的”高內(nèi)聚,低耦合” 也就是說,每個(gè)類應(yīng)該只有一個(gè)職責(zé),對外只能提供一種功能,而引起類變化的原因應(yīng)該只有一個(gè)。在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。 l 開閉原則 核心思想是:一個(gè)對象對擴(kuò)展開放,對修改關(guān)閉。 其實(shí)開閉原則的意思就是:對類的改動是通過增加代碼進(jìn)行的,而不是修改現(xiàn)有代碼。 也就是說軟件開發(fā)人員一旦寫出了可以運(yùn)行的代碼,就不應(yīng)該去

10、改動它,而是要保證它能一直運(yùn)行下去,如何能夠做到這一點(diǎn)呢?這就需要借助于抽象和多態(tài),即把可能變化的內(nèi)容抽象出來,從而使抽象的部分是相對穩(wěn)定的,而具體的實(shí)現(xiàn)則是可以改變和擴(kuò)展的。 l 里氏替換原則 核心思想:在任何父類出現(xiàn)的地方都可以用它的子類來替代。 其實(shí)就是說:同一個(gè)繼承體系中的對象應(yīng)該有共同的行為特征。 l 依賴注入原則 核心思想:要依賴于抽象,不要依賴于具體實(shí)現(xiàn)。 其實(shí)就是說:在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。為了實(shí)現(xiàn)這一原則,就要求我們在編程的時(shí)候針對抽象類或者接口編程,而不是針對具體實(shí)現(xiàn)編程。 l 接口分離原則 核

11、心思想:不應(yīng)該強(qiáng)迫程序依賴它們不需要使用的方法。 其實(shí)就是說:一個(gè)接口不需要提供太多的行為,一個(gè)接口應(yīng)該只提供一種對外的功能,不應(yīng)該把所有的操作都封裝到一個(gè)接口中。 l 迪米特原則 核心思想:一個(gè)對象應(yīng)當(dāng)對其他對象盡可能少的了解 其實(shí)就是說:降低各個(gè)對象之間的耦合,提高系統(tǒng)的可維護(hù)性。在模塊之間應(yīng)該只通過接口編程,而不理會模塊的內(nèi)部工作原理,它可以使各個(gè)模塊耦合度降到最低,促進(jìn)軟件的復(fù)用 16 設(shè)計(jì)模式l 設(shè)計(jì)模式概述 設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性

12、。 設(shè)計(jì)模式不是一種方法和技術(shù),而是一種思想 設(shè)計(jì)模式和具體的語言無關(guān),學(xué)習(xí)設(shè)計(jì)模式就是要建立面向?qū)ο蟮乃枷?,盡可能的面向接口編程,低耦合,高內(nèi)聚,是設(shè)計(jì)的程序可復(fù)用 學(xué)習(xí)設(shè)計(jì)模式能夠促進(jìn)對面向?qū)ο笏枷氲睦斫猓粗嗳?。它們相輔相成 l 設(shè)計(jì)模式概述 設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 設(shè)計(jì)模式不是一種方法和技術(shù),而是一種思想 設(shè)計(jì)模式和具體的語言無關(guān),學(xué)習(xí)設(shè)計(jì)模式就是要建立面向?qū)ο蟮乃枷?,盡可能的面向接口編程,低耦合,高內(nèi)聚,是設(shè)計(jì)的程序可復(fù)用 學(xué)習(xí)

13、設(shè)計(jì)模式能夠促進(jìn)對面向?qū)ο笏枷氲睦斫?,反之亦然。它們相輔相成 l 創(chuàng)建型模式:簡單工廠模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式,單例模式。(6個(gè)) l 結(jié)構(gòu)型模式:外觀模式、適配器模式、代理模式、裝飾模式、橋接模式、組合模式、享元模式。(7個(gè)) l 行為型模式:模版方法模式、觀察者模式、狀態(tài)模式、職責(zé)鏈模式、命令模式、訪問者模式、策略模式、備忘錄模式、迭代器模式、解釋器模式。(10個(gè)) 17 簡單工廠模式l 簡單工廠模式概述 又叫靜態(tài)工廠方法模式,它定義一個(gè)具體的工廠類負(fù)責(zé)創(chuàng)建一些類的實(shí)例 l 優(yōu)點(diǎn) 客戶端不需要在負(fù)責(zé)對象的創(chuàng)建,從而明確了各個(gè)類的職責(zé) l 缺點(diǎn) 這個(gè)靜態(tài)工廠類負(fù)

14、責(zé)所有對象的創(chuàng)建,如果有新的對象增加,或者某些對象的創(chuàng)建方式不同,就需要不斷的修改工廠類,不利于后期的維護(hù)動物抽象類:public abstract Animal public abstract void eat(); 具體狗類:public class Dog extends Animal 具體貓類:public class Cat extends Animal 開始,在測試類中每個(gè)具體的內(nèi)容自己創(chuàng)建對象,但是,創(chuàng)建對象的工作如果比較麻煩,就需要有人專門做這個(gè)事情,所以就知道了一個(gè)專門的類來創(chuàng)建對象。 public class AnimalFactory private AnimalFact

15、ory()/public static Dog createDog() return new Dog();/public static Cat createCat() return new Cat();/改進(jìn) public static Animal createAnimal(String animalName) if(“dog”.equals(animalName) else if(“cat”.equals(animale) else return null; 18 工廠方法模式l 工廠方法模式概述 工廠方法模式中抽象工廠類負(fù)責(zé)定義創(chuàng)建對象的接口,具體對象的創(chuàng)建工作由繼承抽象工廠的具體類實(shí)現(xiàn)

16、。 l 優(yōu)點(diǎn) 客戶端不需要在負(fù)責(zé)對象的創(chuàng)建,從而明確了各個(gè)類的職責(zé),如果有新的對象增加,只需要增加一個(gè)具體的類和具體的工廠類即可,不影響已有的代碼,后期維護(hù)容易,增強(qiáng)了系統(tǒng)的擴(kuò)展性 l 缺點(diǎn) l 動物抽象類:public abstract Animal public abstract void eat(); l 工廠接口:public interface Factory public abstract Animal createAnimal();l 具體狗類:public class Dog extends Animal l 具體貓類:public class Cat extends Anim

17、al l 開始,在測試類中每個(gè)具體的內(nèi)容自己創(chuàng)建對象,但是,創(chuàng)建對象的工作如果比較麻煩,就需要有人專門做這個(gè)事情,所以就知道了一個(gè)專門的類來創(chuàng)建對象。發(fā)現(xiàn)每次修改代碼太麻煩,用工廠方法改進(jìn),針對每一個(gè)具體的實(shí)現(xiàn)提供一個(gè)具體工廠。 l 狗工廠:public class DogFactory implements Factory l public Animal createAnimal() l l 貓工廠:public class CatFactory implements Factory l public Animal createAnimal() l 16 單例設(shè)計(jì)模式l 單例設(shè)計(jì)模式概述 單

18、例模式就是要確保類在內(nèi)存中只有一個(gè)對象,該實(shí)例必須自動創(chuàng)建,并且對外提供。 l 優(yōu)點(diǎn) 在系統(tǒng)內(nèi)存中只存在一個(gè)對象,因此可以節(jié)約系統(tǒng)資源,對于一些需要頻繁創(chuàng)建和銷毀的對象單例模式無疑可以提高系統(tǒng)的性能。 l 缺點(diǎn) 沒有抽象層,因此擴(kuò)展很難。 職責(zé)過重,在一定程序上違背了單一職責(zé)17 模版設(shè)計(jì)模式l 模版設(shè)計(jì)模式概述 模版方法模式就是定義一個(gè)算法的骨架,而將具體的算法延遲到子類中來實(shí)現(xiàn) l 優(yōu)點(diǎn) 使用模版方法模式,在定義算法骨架的同時(shí),可以很靈活的實(shí)現(xiàn)具體的算法,滿足用戶靈活多變的需求 l 缺點(diǎn) 如果算法骨架有修改的話,則需要修改抽象類 18 裝飾設(shè)計(jì)模式l 裝飾設(shè)計(jì)模式概述 裝飾模式就是使用被裝

19、飾類的一個(gè)子類的實(shí)例,在客戶端將這個(gè)子類的實(shí)例交給裝飾類。是繼承的替代方案 l 優(yōu)點(diǎn) 使用裝飾模式,可以提供比繼承更靈活的擴(kuò)展對象的功能,它可以動態(tài)的添加對象的功能,并且可以隨意的組合這些功能 l 缺點(diǎn) 正因?yàn)榭梢噪S意組合,所以就可能出現(xiàn)一些不合理的邏輯 l 手機(jī)添加新功能 l 1:繼承版 l 2:裝飾模式版 l 最后說說IO中的裝飾模式應(yīng)用19 適配器設(shè)計(jì)模式l 適配器設(shè)計(jì)模式概述 將一個(gè)類的接口轉(zhuǎn)換成另外一個(gè)客戶希望的接口。從而使原來不能直接調(diào)用的接口變的可以調(diào)用。 l 優(yōu)點(diǎn) 讓本來不適合使用的接口變得適合使用 l 缺點(diǎn) 一次只能適配一個(gè)類,使用有一定的局限性20 構(gòu)造私有Directio

20、n.javapackage cn.itcast_01;public class Direction / 創(chuàng)建幾個(gè)實(shí)例public static final Direction FRONT = new Direction();public static final Direction BEHIND = new Direction();public static final Direction LEFT = new Direction();public static final Direction RIGHT = new Direction();/ 構(gòu)造私有,別人就不能無限的創(chuàng)建了private

21、Direction() Direction2.javapackage cn.itcast_01;public class Direction2 / 創(chuàng)建幾個(gè)實(shí)例public static final Direction2 FRONT = new Direction2("前");public static final Direction2 BEHIND = new Direction2("后");public static final Direction2 LEFT = new Direction2("左");public static

22、 final Direction2 RIGHT = new Direction2("右");/ 構(gòu)造私有,別人就不能無限的創(chuàng)建了/ private Direction2() / / 加入成員變量,并去掉無參構(gòu)造private String name;private Direction2(String name) = name;public String getName() return name;Direction3.javapackage cn.itcast_01;public abstract class Direction3 / 創(chuàng)建幾個(gè)實(shí)例pub

23、lic static final Direction3 FRONT = new Direction3("前") Overridepublic void show() System.out.println("前");public static final Direction3 BEHIND = new Direction3("后") Overridepublic void show() System.out.println("后");public static final Direction3 LEFT = new Direction3("左") Overridepublic void show() System.out.println("左");public static final Direction3 RIGHT = new Direction3("右") Overridepublic void show() System.out.println("右");/ 構(gòu)造私有,別人就不能無限的創(chuàng)建了/ private Direction2()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論