Java程序設計教程課件 第5章 面向對象高級程序設計_第1頁
Java程序設計教程課件 第5章 面向對象高級程序設計_第2頁
Java程序設計教程課件 第5章 面向對象高級程序設計_第3頁
Java程序設計教程課件 第5章 面向對象高級程序設計_第4頁
Java程序設計教程課件 第5章 面向對象高級程序設計_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第5章

面向對象高級程序設計

教學導航教學目標了解Java多繼承的實現(xiàn)方法了解Java的多線程技術及其應用熟悉Java的泛型和泛型方法的正確使用方法掌握Java抽象類的定義與使用方法掌握Java接口的定義與使用方法掌握Java的內(nèi)部類和枚舉類的定義與使用方法掌握Java集合的接口和類的應用教學重點Java抽象類的定義與使用方法Java接口的定義與使用方法Java的泛型和泛型方法的正確使用

身臨其境

華為Mate60手機的參數(shù)如圖5-1所示,格力KFR-72LW/NhGm1BAj空調的參數(shù)如圖5-2所示,某教材的參數(shù)如圖5-3所示。手機、空調、筆記本電腦、音箱、教材都是購物網(wǎng)站待出售的商品,具有一般商品的通用參數(shù),如商品名稱、商品編碼、品牌等。手機隸屬于數(shù)碼產(chǎn)品子類,空調隸屬于電器子類,教材隸屬于圖書子類,這些商品子類之間可能會有相同的參數(shù),但大部分參數(shù)不同。圖5-1

華為Mate60手機的參數(shù)圖5-2

格力KFR-72LW/NhGm1BAj空調的參數(shù)圖5-3

某教材的參數(shù)圖5-4

手機顏色類型

前導知識【知識1-1】認知Java面向對象的高級特性

抽象類和接口是Java面向對象的重要特性,可以實現(xiàn)面向對象的多態(tài)機制。內(nèi)部類定義在其他類的內(nèi)部,并隱藏在外部類之內(nèi),同時,不允許同一個包中的其他類訪問內(nèi)部類,從而對內(nèi)部類提供了更好的封裝。枚舉類提供了對枚舉類型更好的描述和支持。泛型可以在存取對象時明確地指明對象的類型,并將問題暴露在編譯階段,由編譯器進行檢測,避免在運行時出現(xiàn)轉型異常,從而增加程序的可讀性和穩(wěn)定性,提高程序的運行效率。集合是能夠容納其他對象的對象,如模塊2中介紹的數(shù)組就是一種基本的集合對象。集合內(nèi)的元素與元素之間具有一定的數(shù)據(jù)結構,并提供了一些有用的算法,從而為程序組織和操縱批量數(shù)據(jù)提供強有力的支持。Java的一個重要特性就是在語言級層面支持多線程程序設計。多線程是指一個程序中包含多個執(zhí)行流,是實現(xiàn)并發(fā)的一種有效手段。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-1

定義并繼承商品抽象類

【任務描述】創(chuàng)建package5包。創(chuàng)建商品抽象類GoodsAbstractClass5_1,并在其中定義多個成員變量(包括商品編碼、商品名稱、商品數(shù)量、商品價格和貨幣單位等)、多個構造方法和成員方法。在商品抽象類中定義2個抽象方法displayBaseInfo()、displaySizeInfo(),分別用于輸出商品基本信息和商品的尺寸。創(chuàng)建商品抽象類GoodsAbstractClass5_1的抽象子類GoodsAbstractClassSub1,該子類只實現(xiàn)父類的1個抽象方法displayBaseInfo()。創(chuàng)建商品抽象類GoodsAbstractClass5_1的其他3個子類BooksClassSub2、DigitalClassSub3、ElectricalClassSub4,這3個子類實現(xiàn)其父類所有的抽象方法,區(qū)別是構造方法的參數(shù)個數(shù)不同。創(chuàng)建測試類Test5_1和類AbstractTest。分別調用類GoodsAbstractClass5_1的displayAmount()方法,輸出商品總金額;調用類GoodsAbstractClass5_1的displayBaseInfo()、displaySizeInfo()方法,輸出商品基本信息和商品的尺寸。任務5-1

定義并繼承商品抽象類

【知識5-2】定義Java的抽象類和抽象方法1.定義抽象類定義類時,在class關鍵詞前面加上一個關鍵詞abstract,這樣的類被定義為抽象類。定義抽象類的語法格式如下。[訪問控制修飾符]abstractclass類名其中,訪問控制修飾符可以為public,或者沒有訪問控制修飾符。如果訪問控制修飾符為public,則要求類的名稱與文件名完全相同。abstract表示定義的類為抽象類,類名必須是合法的Java標識符。2.定義抽象方法在抽象類中可以定義抽象方法,抽象方法也使用關鍵詞abstract來標識。定義抽象方法的語法格式如下。[訪問控制修飾符]abstract返回類型

方法名([參數(shù)列表]);在抽象方法中只包含方法的聲明部分,不包含方法的實現(xiàn)部分,并直接以“;”結束。如果把抽象類作為父類,則在父類中聲明的抽象方法將在子類中具體實現(xiàn)。因為抽象類(父類)的引用可以指向具體的子類對象,所以會執(zhí)行不同子類重寫后的方法,從而形成多態(tài)。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-2

定義并實現(xiàn)商品接口【任務描述】創(chuàng)建商品接口GoodsInterface5_2,在該接口中定義兩個靜態(tài)常量currencyUnit1和currencyUnit2,用來存儲兩種不同的貨幣單位。另外,在該接口中定義兩個抽象方法displayBaseInfo()、displayAmount(),分別用于輸出商品基本信息和商品總金額。創(chuàng)建實現(xiàn)GoodsInterface5_2的類GoodsAbstractClass1和GoodsClass2,其中類GoodsAbstractClass1定義成抽象類,只實現(xiàn)接口的displayAmount()方法;類GoodsClass2定義成普通類,實現(xiàn)接口所有的抽象方法。創(chuàng)建測試類Test5_2,在該類中分別通過類對象和接口對象訪問類的成員方法。任務5-2

定義并實現(xiàn)商品接口【知識5-3】定義并實現(xiàn)Java接口Java中的接口是一種引用數(shù)據(jù)類型。通過接口可以實現(xiàn)不相關類的相同行為,且無須考慮這些類的關系。接口只包含終態(tài)變量和方法的聲明,而沒有值可以變化的變量和方法的實現(xiàn),且其方法都是抽象方法。通過接口指明多個類需要實現(xiàn)的方法,可以使得設計與實現(xiàn)相分離。1.定義接口定義接口的語法格式如下。[訪問控制修飾符][abstract]interface接口名[extends父接口名,……]{[成員變量定義][成員方法定義]}(1)訪問控制修飾符可以為public或默認值。如果接口聲明為public,則接口名與文件名必須相同。因為接口本身是抽象的,所以接口不能用final修飾。(2)關鍵詞abstract是可選項,可以省略。(3)接口名必須符合Java標識符命名規(guī)則。(4)接口與接口之間可以繼承,并且一個接口可以同時繼承多個接口,多個接口之間用逗號分隔。(5)在接口中可以定義成員變量和成員方法,但接口中的變量和方法有特定的要求。接口中定義的成員變量默認具有public、static、final屬性,也就是說接口中定義的變量為常量,即使沒有加final關鍵詞,也默認為常量,這些常量在定義時必須賦值,賦值后其值不能改變。接口中定義的成員方法默認具有public、abstract屬性,接口中的所有方法都是抽象的,抽象方法不能用static修飾。(6)如果沒有指定接口成員方法和成員變量的public訪問權限,則Java將其隱式地聲明為public。任務5-2

定義并實現(xiàn)商品接口

【知識5-3】定義并實現(xiàn)Java接口Java中的接口是一種引用數(shù)據(jù)類型。通過接口可以實現(xiàn)不相關類的相同行為,且無須考慮這些類的關系。接口只包含終態(tài)變量和方法的聲明,而沒有值可以變化的變量和方法的實現(xiàn),且其方法都是抽象方法。通過接口指明多個類需要實現(xiàn)的方法,可以使得設計與實現(xiàn)相分離。1.定義接口定義接口的語法格式如下。[訪問控制修飾符][abstract]interface接口名[extends父接口名,……]{[成員變量定義][成員方法定義]}(1)訪問控制修飾符可以為public或默認值。如果接口聲明為public,則接口名與文件名必須相同。因為接口本身是抽象的,所以接口不能用final修飾。(2)關鍵詞abstract是可選項,可以省略。(3)接口名必須符合Java標識符命名規(guī)則。(4)接口與接口之間可以繼承,并且一個接口可以同時繼承多個接口,多個接口之間用逗號分隔。(5)在接口中可以定義成員變量和成員方法,但接口中的變量和方法有特定的要求。接口中定義的成員變量默認具有public、static、final屬性,也就是說接口中定義的變量為常量,即使沒有加final關鍵詞,也默認為常量,這些常量在定義時必須賦值,賦值后其值不能改變。接口中定義的成員方法默認具有public、abstract屬性,接口中的所有方法都是抽象的,抽象方法不能用static修飾。(6)如果沒有指定接口成員方法和成員變量的public訪問權限,則Java將其隱式地聲明為public。任務5-2

定義并實現(xiàn)商品接口

【知識5-3】定義并實現(xiàn)Java接口2.實現(xiàn)接口接口與接口之間可以有繼承關系,而類與接口之間是實現(xiàn)(Implements)關系,即類實現(xiàn)了接口。實現(xiàn)接口的語法格式如下。訪問控制修飾符class類名[extends父類名][implements接口1,[接口2]……]{//類體}實現(xiàn)接口的類定義與一般類定義基本相似,但存在以下方面的區(qū)別。(1)接口列表中可以有多個接口,多個接口之間用逗號分隔。(2)一個類實現(xiàn)接口時,要實現(xiàn)接口中所有的抽象方法,否則這個類必須定義為抽象類。(3)因為接口中抽象方法的訪問權限默認為public,在類中實現(xiàn)抽象方法時其訪問權限不能降低,所以這些抽象方法在類中重寫后訪問權限只能為public。任務5-2

定義并實現(xiàn)商品接口

【知識5-4】區(qū)分Java接口與抽象類接口與抽象類在本質上是不同的。當類繼承抽象類時,子類與抽象類之間有繼承關系;當類實現(xiàn)接口時,類與接口之間沒有繼承關系。(1)接口與抽象類的共同點①

兩者都包含抽象方法,且多個類共用方法的參數(shù)列表和返回值。②

兩者都不能被實例化。③

兩者都是引用數(shù)據(jù)類型,其變量可被賦值為子類或實現(xiàn)接口類的對象。(2)接口與抽象類的區(qū)別①

接口使用interface來聲明,抽象類使用abstractclass來聲明。②

類只能繼承一個抽象類,但可以同時實現(xiàn)多個接口。③

抽象類中的成員變量定義與非抽象類中的成員變量定義相同,子類可以對成員變量賦值;但接口中的成員變量的默認屬性為public、static、final,只能聲明為常量。④

抽象類中可以定義抽象方法,也可以定義非抽象方法,還可以定義構造方法;但接口中只能定義抽象方法,不能定義非抽象方法和構造方法。⑤

抽象類中的抽象方法前必須使用abstract來修飾,且訪問控制修飾符可以是public、protected和默認值這3種中的任意一種;而接口中的成員方法的默認屬性為abstract和public。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-3

實現(xiàn)商品類多繼承并訪問成員方法【任務描述】(1)創(chuàng)建1個抽象類AbstractClass5_3,在該類中定義1個抽象方法displayBaseInfo(),用于輸出商品的基本信息。(2)創(chuàng)建2個接口Interface1和Interface2。在接口Interface1中定義1個抽象方法displayResolution(),用于輸出商品的分辨率;在接口Interface2中定義1個抽象方法displaySize(),用于輸出商品的機身尺寸。(3)創(chuàng)建繼承自AbstractClass5_3的子類GoodsClassSub1。在該子類中聲明3個成員變量(包括商品編碼、商品名稱和商品價格)、1個構造方法,以及1個成員方法displayGoodsType(),該成員方法用于輸出商品的類別,實現(xiàn)其父類的抽象方法displayBaseInfo()。(4)創(chuàng)建類GoodsClassSub2,實現(xiàn)接口Interface1。在該類中實現(xiàn)接口的抽象方法displayResolution(),并且聲明1個成員方法displayGoodsType(),用于輸出商品的類別。(5)創(chuàng)建類GoodsClassSub3,實現(xiàn)接口Interface2。在該類中實現(xiàn)接口的抽象方法displaySize(),并且聲明1個成員方法displayGoodsType(),用于輸出商品的類別。(6)創(chuàng)建繼承自抽象類AbstractClass5_3的子類GoodsMultiInherit5_3,該類要求同時實現(xiàn)2個接口,并實現(xiàn)抽象類和接口中所有的抽象方法。(7)創(chuàng)建測試類Test5_3_1,測試類AbstractClass5_3的對象對其自身的成員方法以及子類的成員方法的可訪問性;測試接口類型的變量對其自身的成員方法以及實現(xiàn)類的成員方法的可訪問性;測試接口類型引用強制轉換成具體對象類型的引用后,接口類型的變量對其實現(xiàn)類的成員方法的可訪問性。(8)創(chuàng)建測試類Test5_3_2,測試多繼承的可訪問性。通過子類對象訪問父類的成員方法和接口的成員方法。通過接口類型的變量引用類對象,訪問接口的成員方法,將接口類型的引用強制轉換為具體對象類型后訪問類AbstractClass5_3的成員方法。任務5-3

實現(xiàn)商品類多繼承并訪問成員方法由于接口中的所有方法都是抽象方法,當類實現(xiàn)多個接口時,多個接口中的同名抽象方法在類中只有一個實現(xiàn),從而避免了多繼承后語義上的復雜性。當類實現(xiàn)多個接口時,該類的對象可以被多個接口類型的變量引用。通過接口類型的變量引用類對象時,只能訪問接口中定義的方法,如果要訪問實現(xiàn)接口的類中定義的方法,則需要將接口類型引用強制轉換為類對象的引用。在轉換之前可以使用instanceof測試引用指向對象的實際類型?!局R5-5】認知Java多繼承與訪問成員方法5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-4

定義并使用商品內(nèi)部類

【任務描述】創(chuàng)建外部類GoodsOuterClass5_4,在該外部類中定義3個成員變量(商品編碼、商品名稱、商品數(shù)量)、2個構造方法、2個成員方法(displayBaseInfo()方法用于輸出商品基本信息,printOut()方法用于創(chuàng)建內(nèi)部類的對象,并調用內(nèi)部類對象的成員方法)。在外部類的內(nèi)部定義內(nèi)部類GoodsInnerClass,在該內(nèi)部類方法中定義3個變量(商品數(shù)量、商品價格、貨幣單位)、2個構造方法、3個成員方法(calAmount()方法用于計算商品總金額,displayAmount()方法用于輸出商品總金額,printVariable()方法用于訪問局部變量、內(nèi)部類和外部類的同名私有成員變量)。創(chuàng)建測試類Test5_4,在該測試類中創(chuàng)建外部類的對象,再通過外部類對象創(chuàng)建內(nèi)部類的對象,通過外部類的構造方法創(chuàng)建非靜態(tài)內(nèi)部類對象,并調用內(nèi)部類對象的方法。在測試類Test5_4中創(chuàng)建外部類的對象,測試是否可以通過內(nèi)部類的成員方法printVariable()訪問內(nèi)部類成員方法的局部變量、外部類和內(nèi)部類的同名私有成員變量。任務5-4

定義并使用商品內(nèi)部類

【知識5-6】定義并使用Java內(nèi)部類內(nèi)部類的定義有兩種:作為外部類的一個成員來定義;在外部類的方法中定義。外部類的成員可以是變量和方法,也可以是一個類。作為外部類成員的內(nèi)部類與其他外部類成員一樣,訪問控制修飾符可以為public、protected、private或默認值。非靜態(tài)內(nèi)部類與外部類中的其他非靜態(tài)成員一樣依賴外部類對象,要在創(chuàng)建外部類對象之后才能創(chuàng)建內(nèi)部類對象。內(nèi)部類對象既可以在外部類的成員方法中創(chuàng)建,又可以在外部類之外創(chuàng)建。在外部類的成員方法中創(chuàng)建內(nèi)部類對象的語法格式與創(chuàng)建外部類對象的語法格式相同。在外部類之外創(chuàng)建內(nèi)部類對象的語法格式有以下兩種形式。外部類類名.內(nèi)部類類名引用變量=外部類對象引用.new內(nèi)部類構造方法名();外部類類名.內(nèi)部類類名引用變量=new外部類構造方法名.new內(nèi)部類構造方法名();假設外部類類名為OutClass,內(nèi)部類類名為InClass,則在外部類之外創(chuàng)建內(nèi)部類對象的代碼如下。第一種方法:先創(chuàng)建外部類對象,代碼為OutClassout=newOutClass();;再通過外部類對象out創(chuàng)建內(nèi)部類對象,代碼為OutClass.InClassin=out.newInClass();。第二種方法:直接創(chuàng)建非靜態(tài)內(nèi)部類對象,代碼為OutClass.InClassin=newOutClass().newInClass();。非靜態(tài)內(nèi)部類作為外部類的一個成員,可以訪問外部類中的所有成員,包括外部類中的private成員。在外部類的成員也可以訪問內(nèi)部類的所有成員(包括private成員),但訪問之前要創(chuàng)建內(nèi)部類對象。在定義內(nèi)部類時,內(nèi)部類的類名不能與外部類的類名相同,但內(nèi)部類成員的名稱可以與外部類成員的名稱相同。當內(nèi)部類成員方法中的局部變量、內(nèi)部類成員變量、外部類成員變量的名稱相同時,有效的是局部變量名。內(nèi)部類成員變量的訪問形式:this.內(nèi)部類成員變量名。外部類成員變量的訪問形式:外部類類名.this.外部類成員變量名。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-5

定義并使用商品顏色枚舉類【任務描述】創(chuàng)建枚舉類GoodsColor,該枚舉類包括6個枚舉值:白色、黑色、紫色、藍色、灰色、紅色。創(chuàng)建類GoodsColorEnum5_5,在該類的main()方法中定義枚舉類型變量并正確賦值,然后輸出枚舉類型變量的值。在類GoodsColorEnum5_5的main()方法中創(chuàng)建枚舉類型的一維數(shù)組,并通過枚舉類中的靜態(tài)方法values()為數(shù)組賦值,然后通過for語句輸出全部枚舉值,最后使用switch語句判斷商品顏色。任務5-4

定義并使用商品內(nèi)部類

【知識5-7】定義并使用Java枚舉類定義枚舉類的語法格式如下。訪問控制修飾符enum枚舉類型名稱{枚舉選項列表}枚舉類本質上就是類,使用關鍵詞enum定義的枚舉類型繼承自Enum類,而不是Object類,通過枚舉類型對象可以調用其繼承的方法。定義枚舉類型以后,枚舉類型變量的取值只能為相應枚舉類中定義的值。Enum類中的方法publicStringtoString()可以返回枚舉常量的名稱,靜態(tài)方法values()可以返回包含全部枚舉值的一維數(shù)組。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-6

定義泛型商品類【任務描述】創(chuàng)建泛型類GenericClass5_6,聲明類型參數(shù)U,使用U定義泛型類GenericClass5_6的成員變量、方法的參數(shù)及方法返回值的類型。在該類中,聲明setUnit()方法用于設置成員變量的值,聲明getUnit()方法用于返回成員變量的值。創(chuàng)建受限泛型類GoodsGenericClass,聲明類型參數(shù)N、P、U,并且N和P必須為類Number的子類。在該類中聲明printAmount()方法,用于計算并輸出商品總金額。在main()方法中聲明泛型類GenericClass5_6的第1個對象currencyUnit1,U的類型為Character;聲明泛型類GenericClass5_6的第2個對象currencyUnit2,U的類型為String;調用泛型類GenericClass5_6的方法輸出相應的值。在main()方法中聲明受限泛型類的第1個對象objGeneric1,N、P、U的類型分別為Integer、Double和Character;聲明受限泛型類的第2個對象objGeneric2,N、P、U的類型分別為Integer、Double和String;調用受限泛型類GoodsGenericClass的方法輸出相應的值。任務5-4

定義并使用商品內(nèi)部類

【知識5-8】Java的泛型Java泛型的本質是類型參數(shù)化,也就是說操作的數(shù)據(jù)類型被指定為一個參數(shù)。定義泛型類或接口時,通過類型參數(shù)來抽象數(shù)據(jù)類型,而不是將變量的類型聲明為Object,這樣做的好處是使泛型類或接口的類型安全檢查在編譯階段進行,并且所有的類型轉換都是自動和隱式的,從而保證了類型的安全性。1.定義泛型類定義泛型類的語法格式如下。類的訪問控制修飾符class類名<類型參數(shù)>{

類體}在泛型類的定義中,類型參數(shù)的定義寫在類名后面,并用尖括號“<>”括起來,類型參數(shù)可以使用任何符合Java命名規(guī)則的標識符,但為了方便通常采用單個大寫字母。例如,使用E表示集合元素類型,使用K與V分別表示鍵值對中的鍵類型與值類型,使用T、U、S表示任意類型等。使用泛型類可以使程序具有更強的靈活性,通過定義泛型類,可以將變量的類型看作參數(shù)來定義,而變量的具體類型是在創(chuàng)建泛型類的對象時確定的。泛型類的類型參數(shù)可以用來定義類的成員變量、方法的參數(shù)以及方法返回值的類型。當創(chuàng)建泛型類的對象時,類型參數(shù)只能為引用類型(如Integer、Character、Double),而不能為基本類型(如int、char、double)。任務5-4

定義并使用商品內(nèi)部類

【知識5-8】Java的泛型2.定義泛型接口定義泛型接口的語法格式如下。接口的訪問控制修飾符interface接口名<類型參數(shù)>{

接口體}3.定義受限泛型在定義泛型類或泛型接口時,類名和接口名后面的類型參數(shù)可以為任意類型。如果要限制類型參數(shù)為某個子類型,則把這種泛型稱為受限泛型。在受限泛型中,類型參數(shù)的定義如下。類型參數(shù)extends父類型例如,NextendsNumber表示類型參數(shù)N繼承了抽象類Number,則在創(chuàng)建泛型類的對象時,N必須為抽象類Number的子類,如Integer,否則會出現(xiàn)編譯錯誤。使用受限泛型有以下優(yōu)點:編譯時的類型檢查可以保證類型參數(shù)的每次實例化都符合所設定的標準;因為類型參數(shù)的每次實例化都是受限父類型或其子類型,所以通過類型參數(shù)可以調用受限父類型中的方法。任務5-4

定義并使用商品內(nèi)部類

【知識5-8】Java的泛型4.泛型類的擴充Java中,類通過繼承可以實現(xiàn)類的擴充,泛型類也可以通過繼承實現(xiàn)泛型類的擴充。在泛型類的子類中可以保留父類的類型參數(shù),還可以增加新的類型參數(shù)。如果在定義子類時沒有保留父類中的類型參數(shù),則父類中的類型參數(shù)的類型為Object。5.定義泛型方法與類和接口一樣,方法的聲明也可以被泛型化,即在定義方法時帶有一個或多個類型參數(shù)。定義泛型方法的語法格式如下。<類型參數(shù)>方法返回值類型

方法名(參數(shù)列表){

方法體代碼}使用泛型方法可以將方法的參數(shù)以及返回值的類型參數(shù)化,在實際調用該方法時再確定其具體類型。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-7

應用ArrayList類及其方法創(chuàng)建手機品牌集合并遍歷輸出集合中的元素

【任務描述】創(chuàng)建ArrayList類的集合對象實現(xiàn)List接口,向該集合中添加5個手機品牌元素,并隨機改變集合中元素的排列順序。輸出手機品牌集合中的所有元素。逐個輸出手機品牌集合中的元素?!局R5-9】探析Java的集合類在Java中,集合類和接口共同構成了Java集合框架的基礎。Java集合框架主要用于處理對象的集合,這些集合可以是有序的、無序的,允許或不允許重復元素,或者是基于鍵值對的數(shù)據(jù)結構。Java的集合類都定義在java.util包中,該包及其子包為Java編程提供了一系列有用的工具。Java集合類分為兩種:一種稱為集合類型(Collection),使用接口Collection描述其操作,其存放的基本單位是單個對象,以List和集合(Set)為代表;另一種稱為映射類型(Map),用接口Map描述其操作,其存放的基本單位是鍵值對,映射中存儲的每個對象都是通過一個鍵(Key)對象來獲取一個值(Value)對象,鍵的作用相當于數(shù)組中的索引,即每個鍵都是唯一的,可以利用鍵存取數(shù)據(jù)結構中指定位置的數(shù)據(jù)。Java集合框架定義了一系列接口,如Collection、Set、List、Iterator、Map,具體介紹如下。publicinterfaceSetextendsCollectionpublicinterfaceListextendsCollectionpublicinterfaceMappublicinterfaceIterator任務5-7

應用ArrayList類及其方法創(chuàng)建手機品牌集合并遍歷輸出集合中的元素

【知識5-9】探析Java的集合類(1)Collection接口Collection接口定義了一些通用方法,通過它們可以實現(xiàn)集合元素的添加、刪除等基本操作,是Set接口和List接口的父接口,通常情況下不直接使用。JDK沒有提供Collection接口的任何直接實現(xiàn),而是通過專門的子接口實現(xiàn),如Set接口和List接口。Collection接口中定義的常用方法如表5-23所示。(2)Set接口Set集合包括Set接口及其所有實現(xiàn)類,是一種不包含重復元素的、無序的集合。Set接口繼承自Collection接口,其擁有Collection接口提供的所有方法。Set集合中的對象是無序的,但這種無序并非完全無序,只是不像列表那樣按照對象的插入順序保存對象。JDK提供了實現(xiàn)Set接口的多個類,包括HashSet類和TreeSet類。方法名稱功能說明add(Eobj)將指定對象添加到集合中remove(Objectobj)將指定對象從集合中刪除,返回值為boolean型contains(Objectobj)判斷在集合中是否存在指定對象,返回值為boolean型isEmpty()判斷集合是否為空,返回值為boolean型size()獲取集合中存儲對象的個數(shù),返回值為int型clear()移除集合中的所有對象,即清空該集合iterator()序列化集合中的所有對象,返回值為Iterator<E>型toArray()獲取一個包含所有對象的指定類型的數(shù)組equals(Objectobj)判斷指定對象與該對象是否為同一個對象,返回值為boolean型表5-23

Collection接口中定義的常用方法任務5-7

應用ArrayList類及其方法創(chuàng)建手機品牌集合并遍歷輸出集合中的元素

【知識5-9】探析Java的集合類(3)List接口List接口繼承了Collection接口,除繼承了Collection接口聲明的方法外,還增加了一些按位置存取元素、查找元素、建立List視圖等操作的方法,它是一種可含有重復元素的、有序的集合,也稱為列表或序列。List接口可以控制向列表中插入元素的位置,并可以按元素的插入順序(從0開始)來訪問元素。java.util包提供了實現(xiàn)List接口的ArrayList類(向量表)、Vector類(向量)和LinkedList類。ArrayList類用可變大小的數(shù)組實現(xiàn)List接口,它的對象會隨著元素的增多而自動擴大容量。ArrayList類是非同步的,當有多個線程對它的同一個對象并發(fā)訪問時,為保證數(shù)據(jù)的一致性,必須通過synchronized關鍵詞進行同步控制。List接口中定義的常用方法如表5-24所示。方法名稱功能說明voidadd(intindex,Objectobj)向集合的指定索引位置添加對象,其他對象的索引位置相對后移一位,索引位置從0開始abstractbooleanaddAll(intindex,Collectionc)向集合的指定索引位置添加指定集合中的所有對象Objectremove(intindex)刪除集合中指定索引位置的對象Objectset(intindex,Objectobj)將集合中指定索引位置的對象修改為指定的對象Objectget(intindex)獲得指定索引位置的對象方法名稱功能說明intindexOf(Objectobj)獲得指定對象的索引位置。當存在多個索引位置時,返回第一個索引位置intlastIndexOf(Objectobj)獲得指定對象的索引位置。當存在多個索引位置時,返回最后一個索引位置ListIteratorlistIterator()獲得一個包含所有對象的ListIterator型實例對象ListIteratorlistIterator(intindex)獲得一個包含從指定索引位置到最后的ListIterator型實例對象ListsubList(intformIndex,inttoIndex通過截取從起始位置fromIndex(包含)到終止位置toIndex(不包含)的對象,重新生成并返回一個列表表5-24

List接口中定義的常用方法任務5-7

應用ArrayList類及其方法創(chuàng)建手機品牌集合并遍歷輸出集合中的元素

【知識5-9】探析Java的集合類(4)Iterator接口JavaCollectionAPI為集合對象提供了重復器(Iterator)接口,該接口用來遍歷集合中的元素。Set接口實現(xiàn)類對象對元素的遍歷順序是不確定的,List接口實現(xiàn)類對象對元素的遍歷順序是從前往后。(5)Map接口Map接口以鍵值對的形式存放對象,實現(xiàn)鍵到值的映射,其中鍵對象不可以重復,值對象可以重復,即每個鍵只能映射到一個值上,并按照自身內(nèi)部的排序規(guī)則進行排列。Map接口的實現(xiàn)類有HashMap、TreeMap、Hashtable等。Java的集合類中定義的方法很多,限于本書篇幅,這里只列出了一些常用方法,未列出的方法請讀者參考相關書籍或網(wǎng)絡資源。由ArrayList類實現(xiàn)的列表使用數(shù)組結構保存對象。數(shù)組結構的優(yōu)點是便于對集合進行快速地隨機訪問,如果經(jīng)常根據(jù)索引位置訪問集合中的對象,那么它的效率就較高。數(shù)組結構的缺點是向指定索引位置插入對象和刪除對象的效率較低,且插入或刪除對象的索引越小效率就越低,原因是向指定的索引插入對象時,會同時將指定索引位置以及后面的所有對象向后移動。5.1定義并使用Java的抽象類5.2定義并使用Java的接口5.4探析Java多繼承的實現(xiàn)方法學習要點5.3定義并使用Java的內(nèi)部類5.5定義并使用Java的枚舉類5.6探析Java的泛型5.7探析Java的集合應用Java的多線程技術編程5.8任務5-8

應用Java的多線程技術模擬購物過程

【任務描述】開啟多個購物線程,保證多個購物頁面能夠并行購買同一種商品。創(chuàng)建一個類GoodsSale,實現(xiàn)Runnable接口,在類GoodsSale中定義2個成員變量(商品數(shù)量和商品名稱),定義2個構造方法(無參構造方法和包含2個參數(shù)的構造方法),重寫Runnable接口的run()方法,在該方法中輸出商品庫存數(shù)量。創(chuàng)建另一個類TestThread5_8,在該類的main()方法中定義類GoodsSale的對象objSale,創(chuàng)建Thread類的3個對象t1、t2和t3,即3個線程,并將對象objSale作為參數(shù)傳遞給Thread類的構造方法,分別啟動這3個線程,模擬購物過程中商品庫存數(shù)量的變化。任務5-8

應用Java的多線程技術模擬購物過程

【知識5-10】認知Java的多線程多任務操作系統(tǒng)能同時運行多個進程,在【W(wǎng)indows任務管理器】窗口的“進程”選項卡中可以看到Windows操作系統(tǒng)同時運行的多個進程。人們在一邊欣賞美妙的音樂、一邊安裝圖像處理軟件的同時,可以使用Word編輯文本,這里同時運行了多個應用程序,在【W(wǎng)indows任務管理器】窗口的【應用程序】選項卡中可以看到這些“正在運行”的應用程序。多進程實際是中央處理器(CentralProcessingUnit,CPU)的分時機制,使得每個進程都能循環(huán)獲得自己的CPU時間片,由于這種機制的輪換速度非???,因此所有程序就好像是在同時運行一樣。1.程序、進程與線程的關系程序是一段靜態(tài)代碼,是軟件執(zhí)行的對象。進程是程序的一次動態(tài)執(zhí)行過程,每一個進程都擁有自己的系統(tǒng)資源、內(nèi)存空間和地址空間,它對應了代碼從加載、執(zhí)行到執(zhí)行完畢的一個完整過程,這個過程也是進程的生命周期。線程是進程的基本執(zhí)行單位,是比進程更小的執(zhí)行單位,一個進程在執(zhí)行過程中可以產(chǎn)生多個線程,形成多個執(zhí)行流,每個線程有自身的生命周期,可以負責不同的任務而互不干擾,線程是一個動態(tài)的概念。多線程是實現(xiàn)并發(fā)和提高系統(tǒng)資源利用率的一種有效手段,Java支持多線程,允許多個線程同時處于運行狀態(tài),每個線程執(zhí)行自己的任務。任務5-8

應用Java的多線程技術模擬購物過程

【知識5-10】認知Java的多線程2.線程的生命周期及其狀態(tài)轉換線程在創(chuàng)建之后,就開始了它的生命周期,一個線程在其整個生命周期中可處于不同的狀態(tài),線程在生命周期中有5種狀態(tài):新建(New)、就緒(Ready)、運行(Running)、阻塞(Blocked)和終止(Terminated)。Java程序可以控制線程在這5種狀態(tài)之間轉換,線程狀態(tài)及狀態(tài)轉換說明如下。(1)調用線程類的構造方法創(chuàng)建線程后,線程處于新建狀態(tài)。(2)線程調用start()方法后處于就緒狀態(tài)。此時,如果CPU在運行其他線程,則線程必須排隊等待,如果CPU空閑,則線程立即占用CPU并開始運行。(3)線程獲得CPU后處于運行狀態(tài)。(4)運行中的線程如果遇到讀寫數(shù)據(jù)、調用sleep()方法或其他阻塞事件,則狀態(tài)轉換為阻塞狀態(tài)。(5)如果引起阻塞的事件結束,如數(shù)據(jù)讀寫完畢或sleep()方法設定的時間已到,則處于阻塞狀態(tài)的線程回到就緒狀態(tài)。(6)線程遇到異?;蚓€程代碼運行完畢,不能繼續(xù)運行時,線程處于終止狀態(tài)。任務5-8

應用Java的多線程技術模擬購物過程

【知識5-10】認知Java的多線程3.Java的線程接口和線程類Java應用程序中可以定義線程類。要使用Runnable接口或Thread類定義線程類,它們都位于java.lang包中。在java.lang包中,Runnable接口定義如下。publicinterfaceRunnable{publicvoidrun();}Runnable接口提供了一種無須擴展Thread類就可以創(chuàng)建一個新線程的方式,從而克服了Java單繼承方式所帶來的各種限制。Runnable接口中只有一個方法run()。一個類要實現(xiàn)Runnable接口,就必須重寫run()方法。該方法負責完成線程所需執(zhí)行的任務。線程運行后自動執(zhí)行run()方法中的代碼,run()方法不需要調用。在java.lang包中,Thread類定義如下。publicclassThreadextendsObjectimplementsRunnable{…privateRunnabletarget;…publicThread(){…}publicThread(Runnabletarget){…}…publicvoidrun(){…}}任務5-8

應用Java的多線程技術模擬購物過程

【知識5-10】認知Java的多線程Thread類本身實現(xiàn)了Runnable接口,但僅以空的方法體覆蓋了run()方法。繼承Thread類定義線程時,需要重寫run()方法,并在run()方法的方法體中編寫線程執(zhí)行的代碼。Thread類常用的構造方法如下。①Thread()。②Thread(Stringname)。③Thread(Runnabletarget)。④Thread(Runnabletarget,Stringname)。Thread類常用的成員方法如下。繼承Thread類也就繼承了這些方法,線程對象可以調用這些方法控制線程的行為。①publicvoidstart():使線程變?yōu)榫途w狀態(tài),占用CPU后運行run()方法。②voidsetName(Stringname):設置線程名。③StringgetName():獲取線程名。④voidsetPriority(intnewPriority):設置線程優(yōu)先級。⑤intgetPriority():獲取線程優(yōu)先級。⑥staticvoidsleep(longmills):線程睡眠的毫秒數(shù)。⑦staticThreadcurrentThread():返回正在運行的線程對象。任務5-8

應用Java的多線程技術模擬購物過程

【知識5-10】認知Java的多線程4.創(chuàng)建線程對象創(chuàng)建線程對象有兩種方法:繼承Thread類和實現(xiàn)Runnable接口。這兩種方法都要用到Thread類,不同點在于通過不同的途徑覆蓋run()方法。(1)通過繼承Thread類創(chuàng)建線程對象①

創(chuàng)建繼承自Thread類的線程類,并重寫run()方法,在run()方

溫馨提示

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

評論

0/150

提交評論