Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性

上傳人:wux****ua 文檔編號:21890166 上傳時(shí)間:2021-05-13 格式:PPT 頁數(shù):68 大?。?.40MB
收藏 版權(quán)申訴 舉報(bào) 下載
Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性_第1頁
第1頁 / 共68頁
Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性_第2頁
第2頁 / 共68頁
Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性_第3頁
第3頁 / 共68頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java實(shí)用程序設(shè)計(jì)(西電版)第4章Java高級特性(68頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、1 第 4 章 Java 高級特性第 4 章 Java 高 級 特 性4.1 靜態(tài)變量、 方法與初始化程序塊4.2 final關(guān)鍵字與常量4.3 抽象類與接口4.4 枚舉類型4.5 內(nèi)部類 2 第 4 章 Java 高級特性 4.1 靜 態(tài) 變 量 、 方 法 與 初 始 化 程 序 塊有些情況下,一方面,我們可能希望為某一個(gè)成員變量分配單一的存儲(chǔ)空間,而不需要考慮到底要?jiǎng)?chuàng)建多少個(gè)對象,甚至不需要?jiǎng)?chuàng)建任何對象。另一方面,我們可能還希望某個(gè)方法不跟任何對象實(shí)例相關(guān)聯(lián),不需要任何對象實(shí)例也能調(diào)用這個(gè)方法。通過static關(guān)鍵字可以實(shí)現(xiàn)這兩方面的需求。 3 第 4 章 Java 高級特性1. 靜 態(tài)

2、 變 量靜態(tài)變量指的是在類的成員變量聲明中帶有static關(guān)鍵字的變量。對于一個(gè)類,無論創(chuàng)建出多少個(gè)該類的實(shí)例對象,靜態(tài)變量都只占用一份存儲(chǔ)區(qū)域,這份存儲(chǔ)區(qū)域在虛擬機(jī)的方法區(qū)內(nèi)(詳見附錄2)。static關(guān)鍵字不能應(yīng)用于局部變量,只能應(yīng)用于成員變量。 4 第 4 章 Java 高級特性 5 第 4 章 Java 高級特性 6 第 4 章 Java 高級特性2. 靜 態(tài) 方 法靜態(tài)方法指的是在類的成員方法聲明中帶有static關(guān)鍵字的方法。在第3.3節(jié)對this關(guān)鍵字的介紹中已經(jīng)指出,在實(shí)例成員方法的內(nèi)部存在一個(gè)表示“調(diào)用方法的那個(gè)對象”的引用。這個(gè)引用在方法內(nèi)部由this關(guān)鍵字代表,而且它在靜

3、態(tài)方法中不存在。因此,我們也就能理解靜態(tài)方法的特點(diǎn),靜態(tài)方法就是沒有this引用的方法。 7 第 4 章 Java 高級特性 8 第 4 章 Java 高級特性 9 第 4 章 Java 高級特性3. 靜 態(tài) 初 始 化 程 序 塊在類定義中,不屬于任何方法體且以static關(guān)鍵字修飾的語句塊稱為靜態(tài)語句塊。由于靜態(tài)語句塊中的語句常用來對靜態(tài)變量進(jìn)行初始化,因而又稱為靜態(tài)初始化程序塊。 10 第 4 章 Java 高級特性 11 第 4 章 Java 高級特性 12 第 4 章 Java 高級特性4. 靜 態(tài) 數(shù) 據(jù) 的 初 始 化對靜態(tài)成員變量進(jìn)行正確的初始化是類裝載器體系結(jié)構(gòu)(附錄2)基本

4、功能的一部分。從程序設(shè)計(jì)的角度,我們需要知道,對一個(gè)類的靜態(tài)成員的顯式初始化,以及該類的所有靜態(tài)初始化程序塊都是在Java虛擬機(jī)裝載這個(gè)類的時(shí)候執(zhí)行的。當(dāng)一個(gè)類的字節(jié)碼被從.class文件中裝載到Java虛擬機(jī)中(通常在虛擬機(jī)的方法區(qū)中)時(shí),靜態(tài)成員變量的存儲(chǔ)空間就已經(jīng)被開辟,這些初始化動(dòng)作隨之完成,靜態(tài)成員的初始化也就完成了。 13 第 4 章 Java 高級特性 14 第 4 章 Java 高級特性 15 第 4 章 Java 高級特性 16 第 4 章 Java 高級特性 17 第 4 章 Java 高級特性 18 第 4 章 Java 高級特性5. 靜 態(tài) 方 法 的 重 寫從重寫規(guī)則

5、上講,Java語言要求子類不能把父類的靜態(tài)方法重寫為非靜態(tài),也不能把父類的非靜態(tài)方法重寫為靜態(tài),但子類可以定義與父類靜態(tài)方法的聲明相同的方法,如例4-6的mtd2()。 19 第 4 章 Java 高級特性 20 第 4 章 Java 高級特性 21 第 4 章 Java 高級特性 4.2 final關(guān) 鍵 字 與 常 量final關(guān)鍵字是Java中的常用關(guān)鍵字,用來表示類不能被繼承、變量的值不能更改、成員方法不能被重寫。 22 第 4 章 Java 高級特性1. 在 成 員 方 法 聲 明 中 使 用 final在成員方法的聲明中使用final關(guān)鍵字,目的是禁止任何子類重寫這個(gè)方法,這樣,在

6、繼承的過程中,該方法的行為就不會(huì)改變。 23 第 4 章 Java 高級特性2. 在 類 聲 明 中 使 用 final當(dāng)在類聲明中使用final關(guān)鍵字時(shí),表明不允許任何其他類繼承該類。由于final的類不允許被繼承,因而該類的方法也就無法被重寫(繼承是重寫的前提),因此,final類中的所有方法實(shí)際上都被隱含指定為final的。 24 第 4 章 Java 高級特性3. 在 變 量 和 方 法 參 數(shù) 中 使 用 final當(dāng)一個(gè)成員變量或局部變量被聲明為final的,那么變量一旦被賦值就不能改變。對于基本類型的final變量,變量值不能改變。對于引用類型的final變量,一旦引用被初始化指

7、向一個(gè)對象實(shí)例,就無法再讓它指向另一個(gè)對象實(shí)例。但是,對象實(shí)例所包含的內(nèi)容卻是可以更改的,Java也沒有提供任何使得對象實(shí)例作為整體恒定不變的途徑。對于數(shù)組類型的final變量,效果與引用類型的變量類似。 25 第 4 章 Java 高級特性 26 第 4 章 Java 高級特性 27 第 4 章 Java 高級特性 28 第 4 章 Java 高級特性 29 第 4 章 Java 高級特性 30 第 4 章 Java 高級特性 4.3 抽 象 類 與 接 口接口提供了一種將“做什么”與“怎么做”分離的手段。抽象類可以認(rèn)為是介于普通的類與接口之間的一種中間狀態(tài)。 31 第 4 章 Java 高

8、級特性1. 抽 象 類在圖3-1(b)所示的例子中,創(chuàng)建“形狀”類型的目的可能不是使用它的行為,而是為它的所有子類創(chuàng)建一個(gè)統(tǒng)一的接口。不同子類可以用不同的方式表示此接口,這一接口表示了所有子類的共同部分和共通特征。 32 第 4 章 Java 高級特性所謂抽象方法,指的是只有方法聲明而沒有方法體的方法。抽象方法在聲明時(shí)必須加上關(guān)鍵字abstract,例如:abstract void f(); 33 第 4 章 Java 高級特性 34 第 4 章 Java 高級特性 35 第 4 章 Java 高級特性 36 第 4 章 Java 高級特性2. 接 口接口的直覺含義是:所有實(shí)現(xiàn)了接口的類的行為

9、都像接口所指定的那樣。因此,任何使用某個(gè)特定接口的代碼都知道應(yīng)該調(diào)用該接口的哪些方法,而且也只需要知道這些即可??梢哉f,接口代表了使用類的客戶代碼與提供服務(wù)的類之間的協(xié)議。接口規(guī)定了類的行為的基本形式,而不涉及具體的實(shí)現(xiàn)細(xì)節(jié)。實(shí)現(xiàn)一個(gè)接口的類將具有接口所規(guī)定的行為。 37 第 4 章 Java 高級特性創(chuàng)建一個(gè)接口需要使用Interface關(guān)鍵字。接口的一般形式如下:public interface 接口名 extends 父接口列表 接口體 38 第 4 章 Java 高級特性接口體可以包含常量定義和方法定義兩部分。常量定義形如:類型 常量名=常量值;接口體中的方法定義形如:返回類型 方法名

10、(參數(shù)列表); 39 第 4 章 Java 高級特性 40 第 4 章 Java 高級特性 41 第 4 章 Java 高級特性 42 第 4 章 Java 高級特性在接口定義后,可能需要在某些情況下對接口進(jìn)行擴(kuò)展,即增加新的常量定義和方法聲明,例如,向例4-11的Shape1中加入move()方法:interface Shape1 void draw();void erase();String what();void move(); 43 第 4 章 Java 高級特性這種直接向接口中添加新的方法聲明的方式可能會(huì)產(chǎn)生問題:如果已經(jīng)有一些類實(shí)現(xiàn)了原先的Shape1接口,那么添加move()方法

11、使得這些類由具體類變?yōu)榱顺橄箢?,要想?chuàng)建這些類型的對象實(shí)例,就必須在這些類中也實(shí)現(xiàn)move()方法,從而增加了開發(fā)復(fù)雜度且引入了不可靠性。一種可靠的方法是通過創(chuàng)建接口的子接口來實(shí)現(xiàn)對接口的擴(kuò)展,例如:interface MovableShape extends Shape1 void move(); 44 第 4 章 Java 高級特性3. 多 重 繼 承接口的一個(gè)重要功能是幫助實(shí)現(xiàn)多重繼承。接口允許人們通過創(chuàng)建一個(gè)能夠被向上轉(zhuǎn)型為多種基類的類型,來實(shí)現(xiàn)一種類似多重繼承變種的特性。 45 第 4 章 Java 高級特性 圖4-1 Java的多重繼承方式 46 第 4 章 Java 高級特性 4

12、7 第 4 章 Java 高級特性 48 第 4 章 Java 高級特性 4.4 枚 舉 類 型 1. 枚 舉 類 型 的 概 念從J2SE 5.0開始,枚舉類型被引入Java語言中。這一語法在C語言和C+中早已具備,但Java提供的枚舉類型的功能更加完備。在引入枚舉類型之前,Java需要通過創(chuàng)建整型常量集來實(shí)現(xiàn)類似枚舉類型值的效果。在引入枚舉類型后,Java程序可以通過關(guān)鍵字enum將一組具名的值的有限集合創(chuàng)建為一種新的類型。 49 第 4 章 Java 高級特性一個(gè)枚舉類型的典型定義如下:public enum Grade FRESHMAN,SOPHOMORE,JUNIOR,SENIOR又

13、如 public enum Season SPRING,SUMMER,F(xiàn)ALL,WINTER 50 第 4 章 Java 高級特性使用枚舉類型時(shí),往往要定義枚舉類型的變量,這個(gè)變量是引用類型,引用到某個(gè)枚舉常量的對象實(shí)例。例如:Grade grade= Grade.JUNIOR; 51 第 4 章 Java 高級特性2. 枚 舉 類 型 的 行 為枚舉類型隱含繼承java.lang.Enum類,因此無法再繼承其他的類。也由于這一繼承關(guān)系,編譯器在創(chuàng)建枚舉類型時(shí)會(huì)自動(dòng)添加一些有用的行為。 52 第 4 章 Java 高級特性 53 第 4 章 Java 高級特性 54 第 4 章 Java 高級

14、特性 55 第 4 章 Java 高級特性3. 自 定 義 方 法 與 方 法 重 寫如果將枚舉類型看做一個(gè)類,那么可以向其中添加新的方法以及新的成員變量,甚至可以添加新的構(gòu)造方法,這些成員變量和方法共同構(gòu)成枚舉體。這樣,枚舉類型的一般形式就變?yōu)?public enum 枚舉類型名 implements 接口列表 枚舉常量定義; 枚舉體定義 56 第 4 章 Java 高級特性 57 第 4 章 Java 高級特性 58 第 4 章 Java 高級特性 4.5 內(nèi) 部 類1. 內(nèi) 部 類 的 創(chuàng) 建 和 使 用所謂內(nèi)部類,是指定義在另一個(gè)類的內(nèi)部的類。內(nèi)部類的作用是將一些邏輯相關(guān)的類組織起來,

15、并控制位于內(nèi)部的類的可見性。創(chuàng)建內(nèi)部類的方式就是將類A的定義置于另一個(gè)類B的內(nèi)部。這時(shí),B稱為A的外包類,A稱為B的內(nèi)部類。 59 第 4 章 Java 高級特性 60 第 4 章 Java 高級特性 61 第 4 章 Java 高級特性 62 第 4 章 Java 高級特性 63 第 4 章 Java 高級特性2. 局 部 內(nèi) 部 類在一個(gè)方法或語句塊的作用域內(nèi)創(chuàng)建的類稱為局部內(nèi)部類。在方法和語句塊之外無法訪問局部內(nèi)部類,方法的返回類型也不能是內(nèi)部類,但可以是內(nèi)部類的父類。這時(shí),如果方法返回一個(gè)內(nèi)部類的對象引用,那么會(huì)進(jìn)行向上轉(zhuǎn)型。 64 第 4 章 Java 高級特性 65 第 4 章 J

16、ava 高級特性3. 匿 名 內(nèi) 部 類匿名內(nèi)部類的形式類似于在創(chuàng)建一個(gè)類的對象時(shí)給出對該類的定義。 66 第 4 章 Java 高級特性例 4-19 AnonymousInner.java: 匿 名 內(nèi) 部 類 的 使 用 。 67 第 4 章 Java 高級特性 68 第 4 章 Java 高級特性在例4-19中,buildDescription()方法中定義了一個(gè)匿名內(nèi)部類,該類以Description類作為父類。在繼承Description類的同時(shí),該類還重寫了Description類的Print()方法。在新的Print()方法中,通過super關(guān)鍵字調(diào)用Description類的Print()方法,然后輸出一個(gè)字符串,該字符串包含從Description繼承來的desc成員,還包含字符串s2。匿名內(nèi)部類調(diào)用默認(rèn)的構(gòu)造方法創(chuàng)建對象實(shí)例,由于父類Description只有一個(gè)帶參數(shù)的構(gòu)造方法,因而匿名內(nèi)部類通過參數(shù)列表傳入一系列適合的參數(shù)給Description的構(gòu)造方法。由于Print()的調(diào)用是發(fā)生在buildDescription()之后,因而s2必須是final的才能被Print()正確訪問。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!