[理學(xué)]第5章 繼承、接口與泛型ppt課件_第1頁(yè)
[理學(xué)]第5章 繼承、接口與泛型ppt課件_第2頁(yè)
[理學(xué)]第5章 繼承、接口與泛型ppt課件_第3頁(yè)
[理學(xué)]第5章 繼承、接口與泛型ppt課件_第4頁(yè)
[理學(xué)]第5章 繼承、接口與泛型ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第5 5章章 承繼、接口與泛型承繼、接口與泛型 本章導(dǎo)讀本章導(dǎo)讀1. 子類(lèi)與父類(lèi)子類(lèi)與父類(lèi)2. 子類(lèi)的承繼性子類(lèi)的承繼性3. 子類(lèi)對(duì)象的構(gòu)造過(guò)程子類(lèi)對(duì)象的構(gòu)造過(guò)程4. 成員變量隱藏和方法的重寫(xiě)成員變量隱藏和方法的重寫(xiě)5. super關(guān)鍵字關(guān)鍵字6. final類(lèi)與類(lèi)與final方法方法7. 對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象8. 承繼與多態(tài)承繼與多態(tài)9. 運(yùn)用運(yùn)用abstract類(lèi)類(lèi)10.接口接口11.接口回調(diào)接口回調(diào)12.內(nèi)部類(lèi)內(nèi)部類(lèi)13.匿名類(lèi)匿名類(lèi)14.異常類(lèi)異常類(lèi)15.泛型類(lèi)泛型類(lèi)5.1 5.1 子類(lèi)與父類(lèi)子類(lèi)與父類(lèi)n由承繼而得到的類(lèi)稱(chēng)為子類(lèi),被承繼的類(lèi)稱(chēng)為父類(lèi)超類(lèi)、由承繼而得到的類(lèi)稱(chēng)

2、為子類(lèi),被承繼的類(lèi)稱(chēng)為父類(lèi)超類(lèi)、基類(lèi)?;?lèi)。前往前往n定義子類(lèi):定義子類(lèi):n class 子類(lèi)名子類(lèi)名 extends 父類(lèi)名父類(lèi)名 n n 父類(lèi)父類(lèi)子類(lèi)子類(lèi)1子類(lèi)子類(lèi)2.子類(lèi)子類(lèi)n動(dòng)物類(lèi)動(dòng)物類(lèi)貓類(lèi)貓類(lèi)狗類(lèi)狗類(lèi).羊類(lèi)羊類(lèi)指明承繼關(guān)系指明承繼關(guān)系例:例:5.2 5.2 子類(lèi)的承繼性子類(lèi)的承繼性n類(lèi)承繼就是子類(lèi)承繼父類(lèi)的成員變量和方法作為本人的成員類(lèi)承繼就是子類(lèi)承繼父類(lèi)的成員變量和方法作為本人的成員變量和方法,就好象它們是在子類(lèi)中直接聲明一樣。變量和方法,就好象它們是在子類(lèi)中直接聲明一樣。n父類(lèi)可以是本人編寫(xiě)的類(lèi)也可以是父類(lèi)可以是本人編寫(xiě)的類(lèi)也可以是JavaJava類(lèi)庫(kù)中的類(lèi)。類(lèi)庫(kù)中的類(lèi)。nJav

3、aJava不支持多重承繼,即子類(lèi)只能有一個(gè)父類(lèi)。不支持多重承繼,即子類(lèi)只能有一個(gè)父類(lèi)。舉例舉例: TestExtends.java : TestExtends.java ( (利用承繼有利于實(shí)現(xiàn)代碼的反復(fù)運(yùn)用,子類(lèi)只需求添加新利用承繼有利于實(shí)現(xiàn)代碼的反復(fù)運(yùn)用,子類(lèi)只需求添加新的功能代碼即可。的功能代碼即可。) )n 子類(lèi)自然地承繼了其父類(lèi)中的一切成員作為本人的成員。子類(lèi)自然地承繼了其父類(lèi)中的一切成員作為本人的成員。n 承繼的成員變量以及方法的訪問(wèn)權(quán)限堅(jiān)持不變。承繼的成員變量以及方法的訪問(wèn)權(quán)限堅(jiān)持不變。5.2 5.2 子類(lèi)的承繼性子類(lèi)的承繼性看例子看例子5-1:Father類(lèi)類(lèi) private

4、int moneyDollar int moneyHK int add(int x,int y)Son類(lèi)類(lèi)int moneyRMBpublic void changMoneyRMB(int x)int subs(int x,int y) private int moneyDollar int moneyHK int add(int x,int y)GrandSon類(lèi)類(lèi) private int moneyDollar int moneyHK int add(int x,int y) int moneyRMB public void changMoneyRMB(int x) int subs(in

5、t x,int y) int multi(int x,int y)n子類(lèi)的構(gòu)造方法總是先調(diào)用父類(lèi)的某個(gè)構(gòu)造方法。子類(lèi)的構(gòu)造方法總是先調(diào)用父類(lèi)的某個(gè)構(gòu)造方法。n默許調(diào)用父類(lèi)構(gòu)造方法:默許調(diào)用父類(lèi)構(gòu)造方法: super() ;n舉例舉例:C1.javan思索:假設(shè)子類(lèi)構(gòu)造方法既沒(méi)有顯式調(diào)用父類(lèi)構(gòu)造方法,而思索:假設(shè)子類(lèi)構(gòu)造方法既沒(méi)有顯式調(diào)用父類(lèi)構(gòu)造方法,而父類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,會(huì)怎樣?父類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,會(huì)怎樣?n顯式調(diào)用父類(lèi)的構(gòu)造方法:顯式調(diào)用父類(lèi)的構(gòu)造方法:n super(參數(shù)列表參數(shù)列表) ;n該語(yǔ)句必需為子類(lèi)構(gòu)造方法的第該語(yǔ)句必需為子類(lèi)構(gòu)造方法的第1條可執(zhí)行語(yǔ)句。條可執(zhí)行語(yǔ)句

6、。n舉例:舉例: C2.java會(huì)編譯出錯(cuò)。會(huì)編譯出錯(cuò)。5.3 5.3 子類(lèi)對(duì)象的構(gòu)造過(guò)程子類(lèi)對(duì)象的構(gòu)造過(guò)程class A int ax; public A(int ax) this.ax=ax; System.out.println(調(diào)用調(diào)用A類(lèi)中有參數(shù)的構(gòu)造方法,類(lèi)中有參數(shù)的構(gòu)造方法,ax= + ax); class B extends A int by; public B(int x,int by) super(x); this.by=by; class C2 public static void main(String args) B b=new B(66,88); System.ou

7、t.println(b.ax+,+b.by); 5.4 5.4 成員變量的隱藏和方法的重寫(xiě)成員變量的隱藏和方法的重寫(xiě) 1 1成員變量的隱藏成員變量的隱藏在子類(lèi)中定義和父類(lèi)中同名的成員變量。在子類(lèi)中定義和父類(lèi)中同名的成員變量。變量的類(lèi)型可以不同。變量的類(lèi)型可以不同。舉例:舉例:Example5_3.javaExample5_3.java?類(lèi)?類(lèi)B B中都包含哪些成員變量、哪些方法?中都包含哪些成員變量、哪些方法?nJavaJava規(guī)定,當(dāng)執(zhí)行從父類(lèi)承繼的方法時(shí),處置的是承繼自規(guī)定,當(dāng)執(zhí)行從父類(lèi)承繼的方法時(shí),處置的是承繼自父類(lèi)的變量;當(dāng)子類(lèi)執(zhí)行由本人定義的方法時(shí),處置的是父類(lèi)的變量;當(dāng)子類(lèi)執(zhí)行由本

8、人定義的方法時(shí),處置的是本人定義的成員變量,而將承繼自父類(lèi)的稱(chēng)號(hào)一樣的成員本人定義的成員變量,而將承繼自父類(lèi)的稱(chēng)號(hào)一樣的成員變量隱藏起來(lái)。變量隱藏起來(lái)。n假想象要訪問(wèn)被隱藏的成員變量,必需在成員變量前面添假想象要訪問(wèn)被隱藏的成員變量,必需在成員變量前面添加前綴,前綴用關(guān)鍵字加前綴,前綴用關(guān)鍵字supersuper加圓點(diǎn)操作符。加圓點(diǎn)操作符。5.4 5.4 成員變量的隱藏和方法的重寫(xiě)成員變量的隱藏和方法的重寫(xiě)2 2方法重寫(xiě)方法重寫(xiě) ( (覆蓋覆蓋) )方法的重寫(xiě)是在子類(lèi)中定義和父類(lèi)中方法名一樣、參方法的重寫(xiě)是在子類(lèi)中定義和父類(lèi)中方法名一樣、參數(shù)表一樣和前往值類(lèi)型一樣的方法,這時(shí),子類(lèi)中數(shù)表一樣和

9、前往值類(lèi)型一樣的方法,這時(shí),子類(lèi)中的方法將會(huì)覆蓋父類(lèi)中的同名方法。的方法將會(huì)覆蓋父類(lèi)中的同名方法。 舉例舉例:Example5_4.java:Example5_4.java假設(shè)子類(lèi)中想運(yùn)用被隱藏的方法,必需運(yùn)用關(guān)鍵字假設(shè)子類(lèi)中想運(yùn)用被隱藏的方法,必需運(yùn)用關(guān)鍵字supersuper。闡明闡明: :(1)Java5.0(1)Java5.0版規(guī)定版規(guī)定, ,假設(shè)前往類(lèi)型是類(lèi)類(lèi)型假設(shè)前往類(lèi)型是類(lèi)類(lèi)型, ,那么可以那么可以把前往類(lèi)型改動(dòng)為該類(lèi)的任何子孫類(lèi)把前往類(lèi)型改動(dòng)為該類(lèi)的任何子孫類(lèi). .(2)(2)在子類(lèi)中不能將它們的訪問(wèn)權(quán)限改動(dòng)為更受限制在子類(lèi)中不能將它們的訪問(wèn)權(quán)限改動(dòng)為更受限制的訪問(wèn)權(quán)限的訪問(wèn)權(quán)

10、限. .如:父類(lèi)方法是如:父類(lèi)方法是publicpublic的,那么子類(lèi)重寫(xiě)方法也必的,那么子類(lèi)重寫(xiě)方法也必需是需是publicpublic的。的。5.4 5.4 成員變量的隱藏和方法的重寫(xiě)成員變量的隱藏和方法的重寫(xiě)(3)留意區(qū)分重載和重寫(xiě)留意區(qū)分重載和重寫(xiě).假設(shè)在子類(lèi)中定義與父類(lèi)同名的方法,參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型與假設(shè)在子類(lèi)中定義與父類(lèi)同名的方法,參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型與父類(lèi)的方法不盡一樣,那實(shí)踐上也沒(méi)有重寫(xiě)承繼的方法,這父類(lèi)的方法不盡一樣,那實(shí)踐上也沒(méi)有重寫(xiě)承繼的方法,這時(shí)子類(lèi)就出現(xiàn)兩個(gè)方法具有一樣的名字時(shí)子類(lèi)就出現(xiàn)兩個(gè)方法具有一樣的名字(方法的重載方法的重載) 。舉例舉例:見(jiàn)見(jiàn)Example5_

11、5.java5.5 super 5.5 super 關(guān)鍵字關(guān)鍵字1 1運(yùn)用運(yùn)用supersuper調(diào)用父類(lèi)的構(gòu)造方法調(diào)用父類(lèi)的構(gòu)造方法子類(lèi)不承繼父類(lèi)的構(gòu)造方法。子類(lèi)不承繼父類(lèi)的構(gòu)造方法。格式格式:super(:super(參數(shù)列表參數(shù)列表););舉例舉例:Example5_6.java:Example5_6.java,TestStudent.javaTestStudent.java不能在構(gòu)造方法中同時(shí)運(yùn)用不能在構(gòu)造方法中同時(shí)運(yùn)用super()super()和和this() .this() .前往前往2 2運(yùn)用運(yùn)用supersuper操作被隱藏的成員變量和方法操作被隱藏的成員變量和方法格式:格式

12、:super.super.父類(lèi)成員變量;父類(lèi)成員變量; super. super.父類(lèi)成員方法父類(lèi)成員方法( (參數(shù)列表參數(shù)列表) );留意:留意:(1)(1)只需在子類(lèi)方法的定義中,可以運(yùn)用只需在子類(lèi)方法的定義中,可以運(yùn)用supersuper。在子類(lèi)定義的外部,不能運(yùn)用子類(lèi)的對(duì)象調(diào)用父類(lèi)在子類(lèi)定義的外部,不能運(yùn)用子類(lèi)的對(duì)象調(diào)用父類(lèi)中曾經(jīng)被覆蓋的方法。中曾經(jīng)被覆蓋的方法。 (2) (2)不允許出現(xiàn)多重不允許出現(xiàn)多重supersuper,如:,如:super.super.f();super.super.f();舉例:舉例:Example5_7.javaExample5_7.java5.6 fin

13、al 5.6 final 類(lèi)和類(lèi)和finalfinal方法方法nfinalfinal類(lèi)不能被承繼,即不能有子類(lèi)類(lèi)不能被承繼,即不能有子類(lèi); ;nfinalfinal方法不能在子類(lèi)被重寫(xiě)方法不能在子類(lèi)被重寫(xiě). .n將一個(gè)類(lèi)聲明為將一個(gè)類(lèi)聲明為finalfinal類(lèi)普通是由于平安性思索。類(lèi)普通是由于平安性思索。n舉例:見(jiàn)舉例:見(jiàn)APIAPI中的中的StringString類(lèi)和數(shù)據(jù)包裝類(lèi)類(lèi)和數(shù)據(jù)包裝類(lèi)前往前往public final class String extends Object闡明闡明String類(lèi)的功能固定下來(lái)。類(lèi)的功能固定下來(lái)。Object是一切類(lèi)的父類(lèi)。是一切類(lèi)的父類(lèi)。假設(shè)一個(gè)類(lèi)沒(méi)指

14、明父類(lèi),假設(shè)一個(gè)類(lèi)沒(méi)指明父類(lèi),那么默許從那么默許從Object類(lèi)承繼。類(lèi)承繼。5.7 5.7 對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象1 1對(duì)象的上轉(zhuǎn)型對(duì)象的上轉(zhuǎn)型 假設(shè),假設(shè),B B是是A A的子類(lèi)或間接子類(lèi)的子類(lèi)或間接子類(lèi) 下面代碼:下面代碼: A a A a; B b =new B(); B b =new B(); a=b; a=b;或?qū)懗苫驅(qū)懗?A a=new B(); A a=new B();那么就稱(chēng)對(duì)象那么就稱(chēng)對(duì)象a a是子類(lèi)對(duì)象是子類(lèi)對(duì)象b b的上轉(zhuǎn)型對(duì)象的上轉(zhuǎn)型對(duì)象. .A類(lèi)類(lèi)B類(lèi)類(lèi)5.7 5.7 對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象n對(duì)象的上轉(zhuǎn)型對(duì)象的實(shí)體是子類(lèi)擔(dān)任創(chuàng)建的,但上轉(zhuǎn)型對(duì)對(duì)象

15、的上轉(zhuǎn)型對(duì)象的實(shí)體是子類(lèi)擔(dān)任創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去原對(duì)象的一些屬性和功能。象會(huì)失去原對(duì)象的一些屬性和功能。n上轉(zhuǎn)型對(duì)象具有如下特點(diǎn)見(jiàn)以下圖所示。上轉(zhuǎn)型對(duì)象具有如下特點(diǎn)見(jiàn)以下圖所示。 對(duì)象對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象承繼或隱藏的成員變量承繼或隱藏的成員變量承繼或重寫(xiě)的方法承繼或重寫(xiě)的方法新增的變量新增的變量新增的方法新增的方法5.7 5.7 對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象舉例舉例:Example5_8.java:Example5_8.javan上轉(zhuǎn)型對(duì)象是子類(lèi)創(chuàng)建的實(shí)體,所以將上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)迫轉(zhuǎn)換上轉(zhuǎn)型對(duì)象是子類(lèi)創(chuàng)建的實(shí)體,所以將上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)迫轉(zhuǎn)換到一個(gè)子類(lèi)對(duì)象時(shí),到一個(gè)子類(lèi)對(duì)象

16、時(shí), B b=(B)a; B b=(B)a;n 該子類(lèi)對(duì)象該子類(lèi)對(duì)象b b又具備了子類(lèi)一切屬性和功能。又具備了子類(lèi)一切屬性和功能。 新增成員新增成員承繼或重寫(xiě)承繼或重寫(xiě)的成員的成員父類(lèi)父類(lèi)A子類(lèi)子類(lèi)BA a=new B();闡明:闡明:上轉(zhuǎn)型對(duì)象是子類(lèi)對(duì)象的上轉(zhuǎn)型對(duì)象是子類(lèi)對(duì)象的“簡(jiǎn)化形狀,它不關(guān)懷子類(lèi)新增的功簡(jiǎn)化形狀,它不關(guān)懷子類(lèi)新增的功能,只關(guān)懷子類(lèi)承繼和重寫(xiě)的功能。能,只關(guān)懷子類(lèi)承繼和重寫(xiě)的功能。a對(duì)象能訪問(wèn)的對(duì)象能訪問(wèn)的b對(duì)象能訪問(wèn)的對(duì)象能訪問(wèn)的B b=(B)a;A aa=new A();aa對(duì)象能訪問(wèn)的對(duì)象能訪問(wèn)的n 上轉(zhuǎn)型對(duì)象不是父類(lèi)創(chuàng)建的對(duì)象。上轉(zhuǎn)型對(duì)象不是父類(lèi)創(chuàng)建的對(duì)象。5.7

17、 5.7 對(duì)象的上轉(zhuǎn)型對(duì)象對(duì)象的上轉(zhuǎn)型對(duì)象( (補(bǔ)補(bǔ)) 2. ) 2. 下轉(zhuǎn)型下轉(zhuǎn)型: :前往前往A類(lèi)類(lèi)B類(lèi)類(lèi)n從父類(lèi)到子類(lèi)的類(lèi)型轉(zhuǎn)換從父類(lèi)到子類(lèi)的類(lèi)型轉(zhuǎn)換,如如:n A a=new A();n B b;n b=(B)a;留意:留意:上述轉(zhuǎn)換雖沒(méi)有語(yǔ)法錯(cuò)誤,但會(huì)出現(xiàn)運(yùn)轉(zhuǎn)時(shí)錯(cuò)誤上述轉(zhuǎn)換雖沒(méi)有語(yǔ)法錯(cuò)誤,但會(huì)出現(xiàn)運(yùn)轉(zhuǎn)時(shí)錯(cuò)誤ClassCastException。只需有意義的下轉(zhuǎn)型轉(zhuǎn)換只需有意義的下轉(zhuǎn)型轉(zhuǎn)換,才不會(huì)出現(xiàn)編譯或運(yùn)轉(zhuǎn)錯(cuò)誤。才不會(huì)出現(xiàn)編譯或運(yùn)轉(zhuǎn)錯(cuò)誤。 如:如:一定要加類(lèi)型轉(zhuǎn)換一定要加類(lèi)型轉(zhuǎn)換A a=new B();B b=(B)a;或:或:B bb=(B)new A(); 3. 3. 運(yùn)用運(yùn)用

18、instanceofinstanceof運(yùn)算符查看下轉(zhuǎn)型能否合法運(yùn)算符查看下轉(zhuǎn)型能否合法格式:援用值格式:援用值 instanceof 類(lèi)名類(lèi)名作用:用來(lái)判別一個(gè)實(shí)例能否是指定類(lèi)的實(shí)例,當(dāng)援用值所作用:用來(lái)判別一個(gè)實(shí)例能否是指定類(lèi)的實(shí)例,當(dāng)援用值所指向的實(shí)例是指定類(lèi)的實(shí)例時(shí),前往指向的實(shí)例是指定類(lèi)的實(shí)例時(shí),前往true,否那么前往,否那么前往false。假設(shè)假設(shè)B類(lèi)是類(lèi)是A類(lèi)的子類(lèi),下面幾種情況類(lèi)的子類(lèi),下面幾種情況,運(yùn)用運(yùn)用instanceof的前的前往值為往值為true:(1)A a=new A();那么那么a instanceof A(2)B b=new B();那么那么b instan

19、ceof A(3) A a=new B();那么那么a instanceof B5.8 5.8 承繼與多態(tài)承繼與多態(tài)n舉例舉例:Example5_9.java:Example5_9.javan當(dāng)運(yùn)用上轉(zhuǎn)型對(duì)象在調(diào)用這個(gè)方法時(shí)就能夠具有多種形狀當(dāng)運(yùn)用上轉(zhuǎn)型對(duì)象在調(diào)用這個(gè)方法時(shí)就能夠具有多種形狀( (不同的行為不同的行為) )。Animal類(lèi)類(lèi)cry()Dog類(lèi)類(lèi)重寫(xiě)重寫(xiě)cry()Cat類(lèi)類(lèi)重寫(xiě)重寫(xiě)cry() Animal animal; animal =new Dog(); animal.cry(); animal=new Cat(); animal.cry();作業(yè):作業(yè):P109問(wèn)答題:?jiǎn)柎?/p>

20、題:1-11練習(xí)練習(xí)上機(jī)作業(yè):上機(jī)作業(yè): 實(shí)驗(yàn)六:實(shí)驗(yàn)六:1,2,9,10復(fù)習(xí):復(fù)習(xí):n承繼的關(guān)鍵字:承繼的關(guān)鍵字:extendsextendsn子類(lèi)的承繼性子類(lèi)的承繼性: :子類(lèi)自然地承繼了其父類(lèi)中的一切成員作子類(lèi)自然地承繼了其父類(lèi)中的一切成員作為本人的成員。為本人的成員。n子類(lèi)對(duì)象的構(gòu)造過(guò)程子類(lèi)對(duì)象的構(gòu)造過(guò)程: :子類(lèi)的構(gòu)造方法總是先調(diào)用父類(lèi)的子類(lèi)的構(gòu)造方法總是先調(diào)用父類(lèi)的某個(gè)構(gòu)造方法。某個(gè)構(gòu)造方法。super(super(參數(shù)列表參數(shù)列表););n成員變量的隱藏和方法的重寫(xiě):成員變量的隱藏和方法的重寫(xiě):nsuper super 關(guān)鍵字的運(yùn)用:直接父類(lèi)的一個(gè)援用。關(guān)鍵字的運(yùn)用:直接父類(lèi)的一

21、個(gè)援用。nfinal final 類(lèi)和類(lèi)和finalfinal方法:方法:finalfinal類(lèi)不能派生子類(lèi),類(lèi)不能派生子類(lèi),finalfinal方方法不能被重寫(xiě)。法不能被重寫(xiě)。n對(duì)象的上轉(zhuǎn)型對(duì)象:父類(lèi)的援用指向子類(lèi)的實(shí)例。對(duì)象的上轉(zhuǎn)型對(duì)象:父類(lèi)的援用指向子類(lèi)的實(shí)例。n承繼與多態(tài):承繼、方法重寫(xiě)是多態(tài)的兩個(gè)條件。承繼與多態(tài):承繼、方法重寫(xiě)是多態(tài)的兩個(gè)條件。5.9 abstract5.9 abstract類(lèi)和類(lèi)和abstractabstract方法方法n籠統(tǒng)類(lèi):表示籠統(tǒng)概念的類(lèi),籠統(tǒng)類(lèi)為子類(lèi)提供一個(gè)實(shí)現(xiàn)籠統(tǒng)類(lèi):表示籠統(tǒng)概念的類(lèi),籠統(tǒng)類(lèi)為子類(lèi)提供一個(gè)實(shí)現(xiàn)框架,本身卻不能提供詳細(xì)的實(shí)例。框架,本身卻

22、不能提供詳細(xì)的實(shí)例。u籠統(tǒng)方法是只需方法頭而沒(méi)有方法體的方法?;\統(tǒng)方法是只需方法頭而沒(méi)有方法體的方法。n籠統(tǒng)類(lèi)籠統(tǒng)類(lèi)A A:n籠統(tǒng)方法籠統(tǒng)方法minmin: abstract class A abstract boolean min(); 關(guān)鍵字關(guān)鍵字abstractabstract表表示籠統(tǒng)意義。示籠統(tǒng)意義。5.9 abstract5.9 abstract類(lèi)和類(lèi)和abstractabstract方法方法籠統(tǒng)類(lèi)的特點(diǎn):籠統(tǒng)類(lèi)的特點(diǎn):一個(gè)一個(gè)abstract類(lèi)只關(guān)懷子類(lèi)能否具有某種功能,不類(lèi)只關(guān)懷子類(lèi)能否具有某種功能,不關(guān)懷功能的詳細(xì)實(shí)現(xiàn)。詳細(xì)實(shí)現(xiàn)由子類(lèi)擔(dān)任。關(guān)懷功能的詳細(xì)實(shí)現(xiàn)。詳細(xì)實(shí)現(xiàn)由子類(lèi)擔(dān)

23、任。如筆類(lèi),我們關(guān)懷它具有書(shū)寫(xiě)的功能,既只需能如筆類(lèi),我們關(guān)懷它具有書(shū)寫(xiě)的功能,既只需能寫(xiě)字就算筆,但如何書(shū)寫(xiě),由子類(lèi),如鉛筆、鋼寫(xiě)字就算筆,但如何書(shū)寫(xiě),由子類(lèi),如鉛筆、鋼筆、毛筆擔(dān)任。筆、毛筆擔(dān)任。包含籠統(tǒng)方法的類(lèi)必需被聲明為籠統(tǒng)類(lèi)。包含籠統(tǒng)方法的類(lèi)必需被聲明為籠統(tǒng)類(lèi)。 class Animal abstract void cry(); abstractn假設(shè)籠統(tǒng)類(lèi)的子類(lèi)不是籠統(tǒng)的,它必需重寫(xiě)父類(lèi)中的一切假設(shè)籠統(tǒng)類(lèi)的子類(lèi)不是籠統(tǒng)的,它必需重寫(xiě)父類(lèi)中的一切籠統(tǒng)方法?;\統(tǒng)方法。5.9 abstract5.9 abstract類(lèi)和類(lèi)和abstractabstract方法方法n籠統(tǒng)類(lèi)是本身不能被實(shí)例

24、化的類(lèi),它只能作為其它類(lèi)的超類(lèi)?;\統(tǒng)類(lèi)是本身不能被實(shí)例化的類(lèi),它只能作為其它類(lèi)的超類(lèi)。n雖然不能創(chuàng)建籠統(tǒng)類(lèi)的實(shí)例雖然不能創(chuàng)建籠統(tǒng)類(lèi)的實(shí)例, ,但可以創(chuàng)建籠統(tǒng)類(lèi)類(lèi)型的變量。但可以創(chuàng)建籠統(tǒng)類(lèi)類(lèi)型的變量。class Dog extends Animal void cry() System.out.println(Wang!Wang!.); n假設(shè)籠統(tǒng)類(lèi)的子類(lèi)不是籠統(tǒng)的,它必需重寫(xiě)父類(lèi)中的一切假設(shè)籠統(tǒng)類(lèi)的子類(lèi)不是籠統(tǒng)的,它必需重寫(xiě)父類(lèi)中的一切籠統(tǒng)方法?;\統(tǒng)方法。n只需把只需把a(bǔ)bstractabstract關(guān)鍵字去掉,再按常規(guī)方法重寫(xiě)即可。關(guān)鍵字去掉,再按常規(guī)方法重寫(xiě)即可。n最簡(jiǎn)單的重寫(xiě)只是加一對(duì)空最

25、簡(jiǎn)單的重寫(xiě)只是加一對(duì)空。Animal a=new Animal();Animal a=new Animal();Animal Animal a;a;Animal是籠統(tǒng)類(lèi)是籠統(tǒng)類(lèi)5.10 5.10 面向籠統(tǒng)面向籠統(tǒng) (如:如:“拿出筆做記錄。,筆是籠統(tǒng)的,對(duì)于聽(tīng)眾來(lái)說(shuō),既可拿出筆做記錄。,筆是籠統(tǒng)的,對(duì)于聽(tīng)眾來(lái)說(shuō),既可以用鋼筆,也可以用鉛筆,或者任何能寫(xiě)字用的筆。以用鋼筆,也可以用鉛筆,或者任何能寫(xiě)字用的筆。)n舉例舉例: 求柱形的體積。見(jiàn)面向籠統(tǒng)求柱形的體積。見(jiàn)面向籠統(tǒng)-實(shí)例文件夾實(shí)例文件夾n分析:柱形的體積分析:柱形的體積=底面積底面積*高高n 底的外形能夠是圓形、梯形、方形底的外形能夠是圓

26、形、梯形、方形.n 面向?qū)ο缶幊桃牒枚x哪些類(lèi):柱形類(lèi)、圓形面向?qū)ο缶幊桃牒枚x哪些類(lèi):柱形類(lèi)、圓形類(lèi)、梯形類(lèi)、方形類(lèi)類(lèi)、梯形類(lèi)、方形類(lèi).n開(kāi)閉原那么開(kāi)閉原那么:就是一個(gè)程序?qū)U(kuò)展開(kāi)放就是一個(gè)程序?qū)U(kuò)展開(kāi)放,對(duì)修正封鎖。對(duì)修正封鎖。n所以還要定義一個(gè)籠統(tǒng)類(lèi):圖形類(lèi),該類(lèi)有一個(gè)求面積的所以還要定義一個(gè)籠統(tǒng)類(lèi):圖形類(lèi),該類(lèi)有一個(gè)求面積的方法。圓形類(lèi)、梯形類(lèi)、方形類(lèi)等承繼于圖形類(lèi)。方法。圓形類(lèi)、梯形類(lèi)、方形類(lèi)等承繼于圖形類(lèi)。5.10 5.10 面向籠統(tǒng)面向籠統(tǒng) 1籠統(tǒng)細(xì)節(jié)在籠統(tǒng)細(xì)節(jié)在Pillar類(lèi)中表達(dá)類(lèi)中表達(dá)將經(jīng)常需求變化的部分分割出來(lái),用將經(jīng)常需求變化的部分分割出來(lái),用abstract類(lèi)和類(lèi)

27、和abstract方方法,不讓設(shè)計(jì)者去關(guān)懷實(shí)現(xiàn)的細(xì)節(jié),防止所設(shè)計(jì)的類(lèi)依賴(lài)于法,不讓設(shè)計(jì)者去關(guān)懷實(shí)現(xiàn)的細(xì)節(jié),防止所設(shè)計(jì)的類(lèi)依賴(lài)于這些細(xì)節(jié)。這些細(xì)節(jié)。2面向籠統(tǒng)設(shè)計(jì)類(lèi):指創(chuàng)建面向籠統(tǒng)設(shè)計(jì)類(lèi):指創(chuàng)建Geometry。前往前往Pillarbottom:height:doublegetVolume():doubleGeometryGeometrygetArea() :doubleCircler: doublegetArea():doubleLadera,b,h : doublegetArea():double.5.11 5.11 接口接口 ( (例:熊貓既是動(dòng)物,也是有價(jià)值的,也是國(guó)寶。例:熊貓既是動(dòng)物

28、,也是有價(jià)值的,也是國(guó)寶。JavaJava是單重是單重承繼的,怎樣實(shí)現(xiàn)多承繼的要求呢承繼的,怎樣實(shí)現(xiàn)多承繼的要求呢? ?用接口用接口) )JavaJava的一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。的一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。1 1接口的聲明與運(yùn)用接口的聲明與運(yùn)用 1 1格式格式n接口中的屬性默以為公有的、靜態(tài)的常量。接口中的屬性默以為公有的、靜態(tài)的常量。 interface interface 接口名接口名 class class 類(lèi)名類(lèi)名 關(guān)鍵字關(guān)鍵字interfaceinterface定義一個(gè)接口。定義一個(gè)接口。interface Computable int MAX=100;如:如:等效于:等效于:pub

29、lic static final int MAX=100;public static final int MAX=100;5.11 5.11 接口接口n接口中的方法必需為公有的、籠統(tǒng)的方法。接口中的方法必需為公有的、籠統(tǒng)的方法。n接口也可以被承繼,接口的承繼同類(lèi)的承繼。接口也可以被承繼,接口的承繼同類(lèi)的承繼。interface Computable int MAX=100; int f(int x);等效于:等效于:public abstract int f(int public abstract int f(int x); x); interface Ainterface B extends

30、 A5.11 5.11 接口接口2 2接口的實(shí)現(xiàn)運(yùn)用接口的實(shí)現(xiàn)運(yùn)用用類(lèi)來(lái)實(shí)現(xiàn)接口中的籠統(tǒng)方法。用類(lèi)來(lái)實(shí)現(xiàn)接口中的籠統(tǒng)方法。 如如: : u關(guān)鍵字關(guān)鍵字implements來(lái)聲明類(lèi)要實(shí)現(xiàn)的接口。來(lái)聲明類(lèi)要實(shí)現(xiàn)的接口。u implement可以實(shí)現(xiàn)多個(gè)接口,之間用逗號(hào)分隔??梢詫?shí)現(xiàn)多個(gè)接口,之間用逗號(hào)分隔。class A implements Printableclass A implements Printable,AddableAddableclass A extends Bclass A extends B了解為另一種承繼了解為另一種承繼假設(shè)假設(shè)A類(lèi)既要承繼于類(lèi)既要承繼于B類(lèi),并要實(shí)現(xiàn)類(lèi),并

31、要實(shí)現(xiàn)Printable,Addable接口,接口,那么那么A類(lèi)聲明如下:類(lèi)聲明如下:class A extends B implements Printableclass A extends B implements Printable,AddableAddable類(lèi)類(lèi)B接口接口Printable接口接口Addable類(lèi)類(lèi)A5.11 5.11 接口接口n思索:假設(shè)實(shí)現(xiàn)接口的類(lèi)不是籠統(tǒng)類(lèi),類(lèi)體中必需求怎思索:假設(shè)實(shí)現(xiàn)接口的類(lèi)不是籠統(tǒng)類(lèi),類(lèi)體中必需求怎樣?樣?n舉例舉例: :見(jiàn)見(jiàn)Example5_11.javaExample5_11.javan留意:類(lèi)在實(shí)現(xiàn)接口方法時(shí),一定要用留意:類(lèi)在實(shí)現(xiàn)接口

32、方法時(shí),一定要用publicpublic來(lái)修飾。來(lái)修飾。類(lèi)體中必需求實(shí)現(xiàn)接口中的一切方法。類(lèi)體中必需求實(shí)現(xiàn)接口中的一切方法。思索:為什么?思索:為什么?在子類(lèi)中不能將它們的訪問(wèn)權(quán)限改動(dòng)為更受在子類(lèi)中不能將它們的訪問(wèn)權(quán)限改動(dòng)為更受限制的訪問(wèn)權(quán)限限制的訪問(wèn)權(quán)限. 2 2接口與多態(tài)接口與多態(tài)接口是一種特殊類(lèi),實(shí)現(xiàn)接口的類(lèi)相當(dāng)于接口的子類(lèi),該子類(lèi)接口是一種特殊類(lèi),實(shí)現(xiàn)接口的類(lèi)相當(dāng)于接口的子類(lèi),該子類(lèi)要重寫(xiě)接口方法,這就具有了多態(tài)的條件。要重寫(xiě)接口方法,這就具有了多態(tài)的條件。接口使程序在容易維護(hù)和強(qiáng)壯前提下,又不失靈敏性。接接口使程序在容易維護(hù)和強(qiáng)壯前提下,又不失靈敏性。接口的思想在于它可以添加類(lèi)需求實(shí)

33、現(xiàn)的多種功能。就像人口的思想在于它可以添加類(lèi)需求實(shí)現(xiàn)的多種功能。就像人在現(xiàn)實(shí)生活中有多種角色。在現(xiàn)實(shí)生活中有多種角色。見(jiàn)見(jiàn)TestInterfaceTestInterface文件夾文件夾5.12 abstract5.12 abstract類(lèi)與接口的比較類(lèi)與接口的比較 1abstract類(lèi)和接口都可以有類(lèi)和接口都可以有abstract方法。方法。2abstract類(lèi)中即可以有常量也可以有變量,而接口中只類(lèi)中即可以有常量也可以有變量,而接口中只可以有常量,不能有變量。可以有常量,不能有變量。3abstract類(lèi)中可以有非類(lèi)中可以有非abstract方法,接口不可以。方法,接口不可以。建議:在既能用

34、接口也能用籠統(tǒng)類(lèi)的情況下,建議運(yùn)用接口,建議:在既能用接口也能用籠統(tǒng)類(lèi)的情況下,建議運(yùn)用接口,由于接口具有更好的靈敏性。由于接口具有更好的靈敏性。5.13 5.13 內(nèi)部類(lèi)內(nèi)部類(lèi)n內(nèi)部類(lèi)內(nèi)部類(lèi): :一個(gè)類(lèi)中聲明另一個(gè)類(lèi)。一個(gè)類(lèi)中聲明另一個(gè)類(lèi)。前往前往n不方便公開(kāi)的、只為外部類(lèi)效力的類(lèi)該當(dāng)定義為內(nèi)部類(lèi)。不方便公開(kāi)的、只為外部類(lèi)效力的類(lèi)該當(dāng)定義為內(nèi)部類(lèi)。n在內(nèi)部類(lèi)中,可以方便地訪問(wèn)外部類(lèi)的成員。在內(nèi)部類(lèi)中,可以方便地訪問(wèn)外部類(lèi)的成員。n外部類(lèi)可以用內(nèi)部類(lèi)聲明對(duì)象。外部類(lèi)可以用內(nèi)部類(lèi)聲明對(duì)象。n內(nèi)部類(lèi)的類(lèi)體中不可以聲明類(lèi)變量和類(lèi)方法。內(nèi)部類(lèi)的類(lèi)體中不可以聲明類(lèi)變量和類(lèi)方法。n留意:內(nèi)部類(lèi)的留意:內(nèi)部

35、類(lèi)的.class.class文件:文件: China$LiaoNing.class China$LiaoNing.class 。舉例:舉例:Example5_15.javaExample5_15.javaclass China . class LiaoNing extends NorthEast /內(nèi)部類(lèi)的聲明內(nèi)部類(lèi)的聲明 . . 外部類(lèi)外部類(lèi)內(nèi)部類(lèi)內(nèi)部類(lèi)5.14 5.14 匿名類(lèi)無(wú)名類(lèi)匿名類(lèi)無(wú)名類(lèi)n假設(shè)希望創(chuàng)建類(lèi)的對(duì)象假設(shè)希望創(chuàng)建類(lèi)的對(duì)象, ,但又不需求命名該類(lèi)但又不需求命名該類(lèi), ,那么可以把類(lèi)那么可以把類(lèi)定義嵌入定義嵌入newnew運(yùn)算符表達(dá)式中運(yùn)算符表達(dá)式中, ,這種類(lèi)定義稱(chēng)為匿名類(lèi)。

36、這種類(lèi)定義稱(chēng)為匿名類(lèi)。n匿名類(lèi)就是一個(gè)沒(méi)有名字的子類(lèi)。它可以承繼于某個(gè)類(lèi),也匿名類(lèi)就是一個(gè)沒(méi)有名字的子類(lèi)。它可以承繼于某個(gè)類(lèi),也可以是實(shí)現(xiàn)某個(gè)接口??梢允菍?shí)現(xiàn)某個(gè)接口。n匿名類(lèi)可以承繼類(lèi)的方法也可以重寫(xiě)類(lèi)的方法。匿名類(lèi)可以承繼類(lèi)的方法也可以重寫(xiě)類(lèi)的方法。舉例舉例:AnonyClass.java:AnonyClass.java舉例舉例:Example5_16.java:Example5_16.javan匿名類(lèi)也適用于接口。匿名類(lèi)也適用于接口。n匿名類(lèi)一定是內(nèi)部類(lèi)匿名類(lèi)一定是內(nèi)部類(lèi); ;它可以訪問(wèn)外部類(lèi)中的成員。它可以訪問(wèn)外部類(lèi)中的成員。作業(yè)作業(yè)n實(shí)驗(yàn)六:實(shí)驗(yàn)六:5,6n實(shí)驗(yàn)七實(shí)驗(yàn)七 1,25.1

37、5 5.15 異常類(lèi)異常類(lèi)(Exception)(Exception)1.1.什么是異常:什么是異常:“異常是指程序執(zhí)行過(guò)程中遇到的事先沒(méi)有預(yù)料到的情況。異常是指程序執(zhí)行過(guò)程中遇到的事先沒(méi)有預(yù)料到的情況。例如發(fā)生零除、數(shù)組越界、文件翻開(kāi)失敗、運(yùn)用空對(duì)象引起的例如發(fā)生零除、數(shù)組越界、文件翻開(kāi)失敗、運(yùn)用空對(duì)象引起的異常等等。異常等等。 在在JavaJava中定義了許多異常類(lèi),每個(gè)異常類(lèi)代表一種類(lèi)型的異常。中定義了許多異常類(lèi),每個(gè)異常類(lèi)代表一種類(lèi)型的異常。 非檢測(cè)異常非檢測(cè)異常Error2.2.異常類(lèi)的承繼關(guān)系異常類(lèi)的承繼關(guān)系 nJava中的一切異常類(lèi)和錯(cuò)誤類(lèi)都是中的一切異常類(lèi)和錯(cuò)誤類(lèi)都是Throw

38、able類(lèi)的直接或間類(lèi)的直接或間接子類(lèi)。接子類(lèi)。ThrowableExceptionRuntimeExceptionFileNotFoundExceptionClassCastExceptionIndexOutOfBoundsException.ArrayIndexOutOfBoundsException.IOException檢測(cè)異常檢測(cè)異常 2. 2.異常類(lèi)的承繼關(guān)系異常類(lèi)的承繼關(guān)系Exception下的異常分為兩大類(lèi):下的異常分為兩大類(lèi):檢測(cè)異常:如檢測(cè)異常:如IOException,該類(lèi)異常必需在程序中處置,否,該類(lèi)異常必需在程序中處置,否那么,有沒(méi)有異常發(fā)生,編譯時(shí)都會(huì)報(bào)告錯(cuò)誤。那么

39、,有沒(méi)有異常發(fā)生,編譯時(shí)都會(huì)報(bào)告錯(cuò)誤。非檢測(cè)異常:也叫運(yùn)轉(zhuǎn)時(shí)異常,非檢測(cè)異常:也叫運(yùn)轉(zhuǎn)時(shí)異常,RuntimeException異常類(lèi)的異常類(lèi)的子類(lèi)。該類(lèi)異??梢圆挥迷诔绦蛑刑幹茫幾g時(shí)不會(huì)報(bào)告錯(cuò)子類(lèi)。該類(lèi)異??梢圆挥迷诔绦蛑刑幹?,編譯時(shí)不會(huì)報(bào)告錯(cuò)誤;只需在運(yùn)轉(zhuǎn)時(shí)發(fā)生異常時(shí)報(bào)告錯(cuò)誤,假設(shè)運(yùn)轉(zhuǎn)時(shí)無(wú)異常誤;只需在運(yùn)轉(zhuǎn)時(shí)發(fā)生異常時(shí)報(bào)告錯(cuò)誤,假設(shè)運(yùn)轉(zhuǎn)時(shí)無(wú)異常發(fā)生,就不報(bào)告錯(cuò)誤。發(fā)生,就不報(bào)告錯(cuò)誤。3.3.異常處置異常處置nJava的異常處置是經(jīng)過(guò)的異常處置是經(jīng)過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:try、catch、throw、throws和和finally。n 1try-catch語(yǔ)句語(yǔ)句n在在tr

40、y語(yǔ)句中包含能夠會(huì)拋出異常的程序塊,在語(yǔ)句中包含能夠會(huì)拋出異常的程序塊,在catch語(yǔ)句中語(yǔ)句中捕獲捕獲try語(yǔ)句中拋出的異常。語(yǔ)句中拋出的異常。n格式如下:格式如下:n 當(dāng)程序運(yùn)轉(zhuǎn)出現(xiàn)異常時(shí),當(dāng)程序運(yùn)轉(zhuǎn)出現(xiàn)異常時(shí),JavaJava運(yùn)轉(zhuǎn)環(huán)境就用異常類(lèi)運(yùn)轉(zhuǎn)環(huán)境就用異常類(lèi)ExceptionException的相應(yīng)子類(lèi)創(chuàng)建一個(gè)異常對(duì)象,并等待處置。的相應(yīng)子類(lèi)創(chuàng)建一個(gè)異常對(duì)象,并等待處置。(TestEx.java)(TestEx.java)try /包含能夠發(fā)生異常的語(yǔ)句包含能夠發(fā)生異常的語(yǔ)句catch(ExceptionSubClass1 e) /對(duì)對(duì)e的處置,可以為空語(yǔ)句的處置,可以為空語(yǔ)句 ca

41、tch(ExceptionSubClass2 e)舉例舉例:Example5_18.java:Example5_18.java, TestException.java TestException.java可有多個(gè)可有多個(gè)catch3.3.異常處置異常處置留意:留意:catchcatch語(yǔ)句應(yīng)該緊跟在語(yǔ)句應(yīng)該緊跟在trytry語(yǔ)句后面,并且語(yǔ)句后面,并且catchcatch語(yǔ)句語(yǔ)句中的異常類(lèi)應(yīng)與中的異常類(lèi)應(yīng)與trytry語(yǔ)句能夠拋出的異常類(lèi)一致。語(yǔ)句能夠拋出的異常類(lèi)一致。trytry語(yǔ)句塊中,假設(shè)某個(gè)語(yǔ)句拋出異常,該語(yǔ)句后的語(yǔ)句塊中,假設(shè)某個(gè)語(yǔ)句拋出異常,該語(yǔ)句后的其他語(yǔ)句不再執(zhí)行,程序流程轉(zhuǎn)向

42、匹配的其他語(yǔ)句不再執(zhí)行,程序流程轉(zhuǎn)向匹配的catchcatch語(yǔ)語(yǔ)句,繼續(xù)運(yùn)轉(zhuǎn)。句,繼續(xù)運(yùn)轉(zhuǎn)。假設(shè)假設(shè)trytry語(yǔ)句塊沒(méi)有產(chǎn)生異常,那么程序流程將跳過(guò)語(yǔ)句塊沒(méi)有產(chǎn)生異常,那么程序流程將跳過(guò)catchcatch語(yǔ)句,繼續(xù)執(zhí)行語(yǔ)句,繼續(xù)執(zhí)行catchcatch后面的語(yǔ)句。后面的語(yǔ)句。多異常處置中,異常對(duì)象與多異常處置中,異常對(duì)象與catchcatch語(yǔ)句塊的匹配是順語(yǔ)句塊的匹配是順序匹配的,為提高程序的執(zhí)行效率,應(yīng)將經(jīng)常發(fā)生序匹配的,為提高程序的執(zhí)行效率,應(yīng)將經(jīng)常發(fā)生的異常對(duì)應(yīng)的的異常對(duì)應(yīng)的catchcatch語(yǔ)句放在前面。語(yǔ)句放在前面。各個(gè)各個(gè)catchcatch參數(shù)中的異常類(lèi)都是參數(shù)中的異常

43、類(lèi)都是ExceptionException的某個(gè)子類(lèi),的某個(gè)子類(lèi),這些子類(lèi)之間不能有父子關(guān)系,否那么保管一個(gè)含這些子類(lèi)之間不能有父子關(guān)系,否那么保管一個(gè)含有父類(lèi)參數(shù)的有父類(lèi)參數(shù)的catchcatch即可。即可。( (這種說(shuō)法不適宜這種說(shuō)法不適宜) )3.3.異常處置異常處置2 2finallyfinally語(yǔ)句語(yǔ)句無(wú)論能否發(fā)生異常,發(fā)生了什么異常,都必需執(zhí)行的語(yǔ)句放無(wú)論能否發(fā)生異常,發(fā)生了什么異常,都必需執(zhí)行的語(yǔ)句放在在finallyfinally語(yǔ)句塊中。語(yǔ)句塊中。 例:例:TestFinally.javatry /包含能夠發(fā)生異常的語(yǔ)句包含能夠發(fā)生異常的語(yǔ)句catch(ExceptionS

44、ubClass1 e) /對(duì)對(duì)e的處置,可以為空語(yǔ)句的處置,可以為空語(yǔ)句 catch(ExceptionSubClass2 e).finally /必需執(zhí)行的語(yǔ)句發(fā)在這必需執(zhí)行的語(yǔ)句發(fā)在這n格式如下:格式如下:try /包含能夠發(fā)生異常的語(yǔ)句包含能夠發(fā)生異常的語(yǔ)句 finally /必需執(zhí)行的語(yǔ)句發(fā)在這必需執(zhí)行的語(yǔ)句發(fā)在這 4 4自定義異常類(lèi)自定義異常類(lèi)n創(chuàng)建自定義異常類(lèi)就是創(chuàng)建創(chuàng)建自定義異常類(lèi)就是創(chuàng)建Exception類(lèi)的子類(lèi)。類(lèi)的子類(lèi)。n舉例舉例:定義一個(gè)三角形類(lèi)定義一個(gè)三角形類(lèi)Triangle,該類(lèi)包含一個(gè)構(gòu)造方法,該類(lèi)包含一個(gè)構(gòu)造方法和一個(gè)求面積方法。求面積的方法對(duì)不能構(gòu)成三角形的數(shù)據(jù)

45、和一個(gè)求面積方法。求面積的方法對(duì)不能構(gòu)成三角形的數(shù)據(jù)將拋出異常,并編寫(xiě)程序測(cè)試該類(lèi)的運(yùn)用。將拋出異常,并編寫(xiě)程序測(cè)試該類(lèi)的運(yùn)用。 n處理方法:處理方法:n創(chuàng)建自定義異常類(lèi),見(jiàn)創(chuàng)建自定義異常類(lèi),見(jiàn)NoTriangleException.javan 規(guī)定規(guī)定getArea方法產(chǎn)生這樣的異常。方法產(chǎn)生這樣的異常。n分析:分析:Trianglea,b,c:doubleTriangle(int x,int y,int z)getArea():double該方法有能夠該方法有能夠發(fā)生異常發(fā)生異常 4 4自定義異常類(lèi)自定義異常類(lèi)處理方法:處理方法:規(guī)定規(guī)定getArea方法產(chǎn)生這樣的異常。方法產(chǎn)生這樣的異常

46、。(1)運(yùn)用運(yùn)用throws子句子句格式:格式: 修飾詞修飾詞 前往類(lèi)型前往類(lèi)型 方法名方法名(參數(shù)列表參數(shù)列表) throws 異常類(lèi)型列表異常類(lèi)型列表如:如:public double getArea() throws NoTriangleException闡明:闡明:關(guān)鍵字關(guān)鍵字throws用在方法頭,用來(lái)表示一個(gè)方法能夠會(huì)拋出的異用在方法頭,用來(lái)表示一個(gè)方法能夠會(huì)拋出的異常。常。 系統(tǒng)類(lèi)中許多方法定義都運(yùn)用系統(tǒng)類(lèi)中許多方法定義都運(yùn)用throws關(guān)鍵字。關(guān)鍵字。例如例如java.io.InputStream類(lèi)的類(lèi)的read()方法:方法: public abstract int read

47、() throws IOException 4 4自定義異常類(lèi)自定義異常類(lèi)n闡明:闡明:n假設(shè)方法定義中包含假設(shè)方法定義中包含throwsthrows子句,調(diào)用該方法的子句,調(diào)用該方法的JavaJava語(yǔ)句必語(yǔ)句必需包含在需包含在try/catchtry/catch語(yǔ)句塊中;或繼續(xù)向上層方法轉(zhuǎn)移,否語(yǔ)句塊中;或繼續(xù)向上層方法轉(zhuǎn)移,否那么將發(fā)生編譯錯(cuò)誤。那么將發(fā)生編譯錯(cuò)誤。 例:例:TypeChar1.java , Example5_19.javaTypeChar1.java , Example5_19.java4 4自定義異常類(lèi)自定義異常類(lèi)(2)運(yùn)用運(yùn)用throw語(yǔ)句語(yǔ)句throw語(yǔ)句用來(lái)明確

48、地拋出一個(gè)異常。語(yǔ)句用來(lái)明確地拋出一個(gè)異常。語(yǔ)法如下:語(yǔ)法如下: . throw throwableInstance; 闡明:闡明:throwableInstance是是Throwable類(lèi)或其子類(lèi)的一個(gè)實(shí)例對(duì)類(lèi)或其子類(lèi)的一個(gè)實(shí)例對(duì)象。象。兩種情況會(huì)產(chǎn)生兩種情況會(huì)產(chǎn)生Throwable的實(shí)例:的實(shí)例:直接用直接用new操作符創(chuàng)建一個(gè)操作符創(chuàng)建一個(gè)Throwable實(shí)例對(duì)象。實(shí)例對(duì)象。Java語(yǔ)句產(chǎn)生的異常實(shí)例,經(jīng)過(guò)參數(shù)傳到語(yǔ)句產(chǎn)生的異常實(shí)例,經(jīng)過(guò)參數(shù)傳到catch子句中。子句中。If (a+b)=c|(b+c)=a|(a+c)=b|(a=0)|b=0|c=0) throw new NoTriangleException();n 如:如:指能夠發(fā)生異常的條件,普通是指能夠發(fā)生異常的條件,普通是if語(yǔ)句語(yǔ)句例:例: TestException2.java5.16 5.16 泛型類(lèi)泛型類(lèi)n泛型泛型Generics :從:從5.0版開(kāi)場(chǎng)版開(kāi)場(chǎng),Java允

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論