版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章補充案例案例4-1 類的繼承一、案例描述1、考核知識點編號:名稱:類的繼承2、練習目標? 了解類繼承的意義和作用? 掌握如何實現(xiàn)類的繼承3、需求分析在程序中,繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系。為了讓初學者熟悉類的繼承,本案例將演示類的繼承并編寫測試類驗證子類是否擁有父類的可繼承成 員。4、設計思路(實現(xiàn)原理)1)設計兩個類 Student和Teacher2) 抽取兩個類共同的內容(如:吃飯、睡覺)封裝到一個類Person中,各自特有的部分保留在 各自類中。3)讓學生類繼承 Person類,老師類也繼承 Person。4) 編寫測試類 Exampl
2、eOl,測試Student類和Teacher是否繼承了 Person類的成員。、案例實現(xiàn)1、抽取父類Person,實現(xiàn)繼承關系,代碼如下:class Person String name;/ 姓名/吃飯的功能void eat() (”吃飯");/睡覺的功能void sleep() (”睡覺");class Student extends Person /學號int sid;class Teacher extends Person / 工號int tid;/教課的功能void teach() (”老師教課");2、定義測試類Example01,代碼如下:public
3、 class Example01public static void main(String args) Student s = new Student();s.eat();s.sleep();(”");Teacher t = new Teacher();t.eat();t.sleep();t.teach();運行結果如圖4-1所示。77 営即黃.t . M j ca J. u w-IDI*1D : y Mi plir Frtfc kn-stf SJh豊p臚IM曲屮 Ejtimu-lvHL 時F±JML囁*I2J圖4-1運行結果三、案例總結1、在Java中,多個類可以繼承一
4、個父類,但是一個類不能直接繼承多個類,一個類只能有一個直接 父類。2、父類是由子類不斷抽取而來的,不斷地抽取就形成了體系結構,這個結構稱為繼承體系結構。3、子類在繼承父類的時候,會自動擁有父類所有的成員。4、繼承的好處是劃分了類的層次性,實現(xiàn)了代碼重用、擴展了程序功能。案例4-2方法的重寫、案例描述1、考核知識點編號:名稱:方法的重寫2、練習目標?了解方法重寫的意義和作用? 掌握如何進行方法重寫3、需求分析在繼承關系中,子類會自動繼承父類中定義的方法,但有時在子類中需要對繼承的方法進行一些 修改,即對父類的方法進行重寫。為了讓初學者掌握方法的重寫,本案例將編寫一個類NewPho ne,該類繼承
5、Phone類并對Phone類的call()方法進行重寫。4、設計思路(實現(xiàn)原理)1) 定義一個類 Phone,編寫方法call(),表示打電話功能2) 定義一個Phone的子類NewPhone,重寫父類call()方法,讓它除了打電話功能外還具有開啟語 言和關閉語言功能。3) 編寫一個測試類 Example02,分別調用重寫前和重寫后的call()方法、案例實現(xiàn)1、定義Phone及其子類NewPhone,子類對父類中的 call()方法重寫,代碼如下: class Pho ne void call() 打電話");class NewPh one exte nds Pho ne voi
6、d call() 開啟語音");super.call();關閉語音");2、定義測試類 Example02,代碼如下:public class Example02public static void main( Str in g args) 重寫前-");Phone phone = new Pho ne();pho ne.call();重寫后-");Phone n ewPho ne = new NewPho ne(); n ewPh on e.call();運行結果如圖4-2所示。圖4-2運行結果三、案例總結1、子類中需要對繼承自父類的方法進行一些修改,
7、這時就用到方法重寫。2、在子類中重寫的方法需要和父類被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。3、子類方法的訪問修飾權限不能小于父類的。4、重寫的主要優(yōu)點是能夠定義子類特有的特征。案例4-3 super訪問父類成員變量一、案例描述1、考核知識點編號:名稱:super關鍵字2、練習目標? 掌握使用super關鍵字訪問父類成員變量3、需求分析子類可以繼承父類的非私有成員變量,如果在子類中修改了繼承自父類的成員變量的值,再想要 訪問父類的該成員變量時,可以通過super.成員變量來實現(xiàn)。為了讓初學者熟悉super關鍵字的用法,本案例將分別設計 Fu類及其子類Zi,并在Zi類的方法中使用s
8、uper關鍵字訪問Fu類的成員變量。4、設計思路(實現(xiàn)原理)1 )編寫一個Fu類,在類中定義無參構造和一個初始值為20的num成員變量。2)Zi類繼承Fu類,在子類中對 num值進行了修改,同時在子類中定義無參構造和一個無返回值的method。方法,method。方法中使用super關鍵字調用了 Fu類的num成員變量。3)定義測試類Example03。、案例實現(xiàn)1、編寫Fu類及其子類Zi,在Zi類中使用super關鍵字調用Fu類成員變量,代碼如下 class Fu Fu() int num = 20;class Zi exte nds Fu Zi() int num = 30;/修改 num
9、 的值void method。/ super關鍵字調用父類成員變量類中 num 值為:"+ super.num);類中 num 值為:"+ num);2、定義測試類 Example03,代碼如下:class Example03public static void main( Str in g args) 乙 z = new Zi();z.method();運行結果如圖4-3所示。圖4-3運行結果三、案例總結1、使用super關鍵字調用父類的成員方法。具體格式如下: super. 成員變量2、 被調用的父類成員變量,必須是非private的。案例4-4 super訪問父類成員
10、方法、案例描述1、考核知識點編號:名稱:super關鍵字2、練習目標?掌握使用super關鍵字訪問父類成員方法3、需求分析子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法,為了解決這個問題,在Java中專門提供了一個 super關鍵字用于訪問父類的成員。為了讓初學者熟悉 super關鍵字的用法,本案例將 分別設計Fu類及其子類Zi,在Zi類的方法中使用super關鍵字訪問Fu類的成員方法。4、設計思路(實現(xiàn)原理)1 )編寫一個Fu類,在類中定義無參構造和一個無返回值的show()方法。2) Zi類繼承Fu類,子類中定義無參構造和一個無返回值的method。方法,method。方法中使用
11、 super關鍵字調用了 Fu類的show()方法。3) 定義測試類Example04。、案例實現(xiàn)1、編寫Fu類及其子類Zi,在Zi類中使用super關鍵字調用Fu類成員方法,代碼如下:class Fu Fu() void show() class Zi exte nds Fu Zi() void method() / super關鍵字調用父類成員方法super.show();2、定義測試類 Example04,代碼如下:class Example04public static void main( Str in g args) 乙 z = new Zi();z.method();運行結果如圖
12、4-4所示。圖4-4運行結果三、案例總結1、使用super關鍵字調用父類的成員方法。具體格式如下: super.成員方法(參數(shù)1,參數(shù)2)2、 被調用的父類成員方法,必須是非private的。案例4-5 super訪問父類構造方法、案例描述1、考核知識點編號:名稱:super關鍵字2、練習目標? 掌握如何在子類構造方法中使用super關鍵字訪問父類構造方法3、需求分析在子類的構造方法中一定會調用父類的某個構造方法,如果想指定調用類父類中的哪個構造方法,可以使用super關鍵字來實現(xiàn)。為了讓初學者掌握super關鍵字的用法,本案例將分別設計Fu類及其子類Zi,在Zi類的構造方法中使用 super
13、關鍵字訪問Fu類的構造方法。4、設計思路(實現(xiàn)原理)1 )編寫一個Fu類,在類中定義無參構造。2) Zi類繼承Fu類,子類中也定義無參構造方法,在構造方法中使用super關鍵字調用Fu類的構 造方法。3)定義測試類Example05。、案例實現(xiàn)1、編寫Fu類及其子類Zi,在Zi類構造中使用super關鍵字調用Fu類構造方法,代碼如下: class Fu 類構造方法門;Fu() class Zi exte nds Fu Zi() super();在子類構造中調用父類構造類構造方法!");2、定義測試類 Example05,代碼如下:public class Example05publi
14、c static void main( Str in g args) Zi zi = new Zi();運行結果如圖4-5所示。圖4-5運行結果三、案例總結1、通過super調用父類構造方法的代碼必須位于子類構造方法的第一行,并且只能出現(xiàn)一次。2、 在子類的構造方法中通過super指定調用父類的哪個構造方法,如果沒有指定,在實例化子類對象 時,會自動調用父類無參的構造方法。3、 被調用的父類構造方法,必須是非private的。案例4-6 final修飾類、案例描述1、考核知識點編號:名稱:final關鍵字2、練習目標? 了解final關鍵字修飾類的特點? 掌握final關鍵字修飾類的用法3、需
15、求分析Java中的類被final關鍵字修飾后,該類將不可以被繼承,也就是不能夠派生子類。為了讓初學者1 )編寫一個final關鍵字修飾的Fu類,類體可以為空2) 編寫Zi類,Zi類繼承于Fu類,類體可以為空3) 定義測試類Example06。、案例實現(xiàn)1、編寫final修飾的Fu類,Zi類繼承Fu類,代碼如下:final class Fu /類體為空代碼/Zi 類繼承final 修飾的Fu類class Zi extends Fu /類體為空代碼2、定義測試類 Example06,代碼如下:public class Example06public static void main(String
16、args) Zi zi = new Zi();運行結果如圖4-6所示。圖4-6運行結果三、案例總結在Java中,被final關鍵字修飾的類為最終類,不能被其它類繼承。案例4-7 final修飾方法一、案例描述1、考核知識點編號:名稱:final關鍵字2、練習目標? 掌握使用final關鍵字修飾方法3、需求分析為了final子類可以繼承父類的成員方法,并在必要時對方法進行重寫,增加了方法的擴展的同時也打破了方法的封裝,如果我們希望父類中的某些方法不能被重寫,這時就可以使用final關鍵字來修飾。讓初學者掌握使用final關鍵字修飾方法,本案例將分別設計兩個類,一個是Fu類,其中定義了修飾的sho
17、w()方法,另一個是繼承Fu類的Zi類,在Zi類中對show()方法進行重寫。4、設計思路(實現(xiàn)原理)1 )編寫一個Fu類,類中定義final修飾的show()方法。2) 編寫Zi類,Zi類繼承于Fu類,在Zi類中對show()方法進行重寫3) 定義測試類 Example07,創(chuàng)建Zi類對象,并調用 Zi類show()方法。、案例實現(xiàn)1、 編寫Fu類及其子類Zi類,在Zi類中對show()方法重寫,代碼如下: class Fu /final 關鍵字修飾的方法public final void show() (”這是絕密資源”);class Zi extends Fu /重寫父類中final修飾
18、的方法public void show() (”這是一堆垃圾,給處理了 ");2、 定義測試類Example07,代碼如下:public class Example07public static void main(String args) Zi z = new Zi();z.show();運行結果如圖4-7所示。圖4-7運行結果三、案例總結當一個類的方法被 final關鍵字修飾后,這個類的子類將不能重寫該方法。案例4-8 final修飾局部變量、案例描述1、考核知識點編號:名稱:final關鍵字2、練習目標?掌握使用final關鍵字修飾局部變量3、需求分析Java中被final修飾
19、的變量為常量,它只能被賦值一次,也就是說final修飾的變量一旦被賦值,其值不能改變。為了讓初學者掌握使用final關鍵字修飾局部變量,本案例將在類的方法中定義一個final修飾的局部變量,并試著對該變量重新賦值。4、設計思路(實現(xiàn)原理)1 )編寫一個Example08類,類中定義類一個final修飾的局部變量 age,為其賦初始值為18。2 )為age重新賦值為20。、案例實現(xiàn)1、編寫類Example08,代碼如下 public class Example08public static void main(String args) final int age = 18; /第一次可以賦值ag
20、e = 20;/再次賦值會報錯編譯錯誤,如圖4-8所示。圖4-8錯誤提示三、案例總結final修飾的變量表示常量,一經(jīng)定義就不能重新賦值。案例4-9 final修飾成員變量、案例描述1、考核知識點編號:名稱:final關鍵字2、練習目標? 掌握使用final關鍵字修飾成員變量3、需求分析final修飾在Java中,final修飾的變量表示常量,一經(jīng)定義就不能重新賦值。為了讓初學者熟悉 變量的情況,本案例將使用final關鍵字修飾成員變量,觀察其是否能夠再次賦值。4、設計思路(實現(xiàn)原理)1 )編寫一個Fu類,父類中定義一個變量X,并用final關鍵字修飾變量。2)編寫Zi類,Zi類繼承于Fu類,
21、在子類中對常量再賦新值。3)定義測試類Example09,觀察運行結果。、案例實現(xiàn)1、編寫Fu類及其子類Zi類,在Zi類中對X再賦值,代碼如下: class Fu /final修飾的變量,也就是常量public final int X = 10;class Zi extends Fu X = 20;/在子類中對常量再賦新值public void method() 2、 定義測試類Example09,代碼如下:public class Example09public static void main(String args) Zi z = new Zi();z.method();編譯錯誤,結果如
22、圖 4-9所示。圖4-9錯誤提示三、案例總結在本案例中Zi類中對變量X再次賦值,運行結果報錯。這是因為Java中被final修飾的變量為常量,它只能被賦值一次,也就是說final修飾的變量一旦被賦值,其值不能改變。如果再次對該變量進行賦值,則程序會在編譯時報錯。案例4-10 接口的實現(xiàn)、案例描述1、考核知識點編號:名稱:接口2、練習目標?掌握如何實現(xiàn)接口3、需求分析由于接口中的方法都是抽象方法,因此不能通過實例化對象的方式來調用接口中的方法。此時需 要定義一個類,并使用implements關鍵字實現(xiàn)接口中所有的方法。為了上初學者掌握如何實現(xiàn)接口, 本案例將設計一個類,使用關鍵字implemen
23、ts實現(xiàn)Inter接口中的方法。4、設計思路(實現(xiàn)原理)1 )設計名為Inter的接口,接口中定義一個初始值為20的num常量和method()抽象方法。2)編寫Inter接口的實現(xiàn)類InterImpl,使用implements關鍵字實現(xiàn)接口中的方法。3)編寫測試類Example10,測試類中對接口的實現(xiàn)類進行實例化,并調用接口中的方法。、案例實現(xiàn)1、編寫接口 In ter,In terImpl類使用impleme nts實現(xiàn)了接口,代碼如下: /定義一個接口interface Inter int num = 20;void method();/ 使用implements關鍵字實現(xiàn)接口clas
24、s InterImpl implements Inter void show() public void method() 2、定義測試類 Example10,代碼如下: class Example10public static void main(String args) /通過實現(xiàn)類實例化InterImpl ii = new InterImpl();ii.show();ii.method();運行結果如圖4-10所示。-nJ xId - AmpLataickage chapta LxanplelU28lintnet hod圖4-10運行結果三、案例總結1、接口使用in terface關鍵字
25、來定義。2、 接口沒有構造方法,接口中的變量缺省都是使用public static final修飾的,即全局常量,接口中的 方法都是public abstract修飾的,即抽象方法。3、 定義一個類,并使用implements關鍵字實現(xiàn)接口中的方法,一個類可以實現(xiàn)多個接口。4、由于接口中的方法都是抽象方法,因此不能直接通過實例化對象的方式來調用接口中的方法,需 要在類實現(xiàn)接口后借助類來間接實例化。案例4-11 接口的繼承一、案例描述1、考核知識點編號:名稱:接口的繼承與多實現(xiàn)2、練習目標? 掌握接口繼承的方式及其特點3、需求分析解,本案例將演示接口與接口、類與接口的繼承和實現(xiàn)關系。4、設計思路
26、(實現(xiàn)原理)1 )設計接口 Phone代表傳統(tǒng)手機,在接口中定義receiveMessages()和call()抽象方法。2) 設計接口 SmartPhone代表智能手機,在接口中定義faceTime()方法,并使用extends關鍵字繼 承Phone接口,使其具有 Phone接口的所有功能。3) 設計類MIPhone表示小米手機,類中定義useMIUI()方法,并實現(xiàn)SmartPhone接口的所有方法。4) 編寫測試類Example",測試類中對 MIPhone進行實例化,并訪問小米手機具有的各種功能。、案例實現(xiàn)1、編寫接口 Phone和 SmartPhone、類 MIPhone。
27、代碼如下: interface Phone void receiveMessages();void call();interface SmartPhone extends Phone void faceTime();class MIPhone implements SmartPhone public void receiveMessages() (”接收短息");public void call() (”語音通話");public void faceTime() (”視頻通話");public void useMIUI() (”使用 MIUI");2、定
28、義測試類 Example",代碼如下:public class Example11 public static void main(String args) MIPhone miPhone = new MIPhone();miPhone.receiveMessages();miPhone.call();miPhone.faceTime();miPhone.useMIUI();運行結果如圖4-11所示。aceeFa即魯ulaln短逼通MI9:馬吾11-£ 口|圖4-11運行結果三、案例總結接口與接口之間的繼承關系,可以是單繼承,也可以是多繼承;一個接口可以通過extends關
29、鍵字繼承多個接口,接口之間用逗號隔開。案例 4-12 Object 類、案例描述1、考核知識點編號:名稱:Object類2、練習目標?了解什么是Object類? 掌握Object類中常用方法的使用3、需求分析在JDK中提供了一個 Object類,它是所有類的父類,即每個類都直接或間接繼承自該類。Object類自身的equals()方法比較的是內存地址值,相當于"=”,但是在實際開發(fā)中我們很少比較兩個對象的地址值,這時候常常就需要根據(jù)自身需求來重寫equals()方法。為了方便初學者學習Object類,本案例將演示如何重寫equals()方法。4、設計思路(實現(xiàn)原理)1) 設計Stud
30、ent類,定義sid變量表示學號,重寫equals()方法,判斷進行比較的兩個學生對象學 號是否相同,相同即為同一個學生,否則不是。2) 編寫測試類 Example12,創(chuàng)建兩個 Student的對象Lily和Lucy,并分別調用setter方法為學號賦值,最后通過打印語句,輸出這兩個對象通過“=”和重寫后的equals()方法比較后的結果。、案例實現(xiàn)1、編寫Student類,重寫equals()方法。代碼如下: class Student Student() /學號private int sid;public void setSid(int sid) this.sid = sid;publi
31、c int getSid() return sid;/我們的需求是學號相同的人就是同一個人.public boolean equals(Object obj)/判斷是否為當前對象if (this = obj) return true;/為了呈現(xiàn)的健壯性,加入類型判斷if (!(obj instanceof Student) return false;Student s = (Student) obj;return (this.sid = s.sid);2、定義測試類 Example12,為學號賦值,并打印使用"=”和重寫equals()方法的比較結果,代碼如 下:public cla
32、ss Example12 public static void main(String args) Student Lily = new Student();Lily.setSid(200);Student Lucy = new Student();Lucy.setSid(200);運行結果如圖4-12所示。圖4-12運行結果三、案例總結1、Object類是Java中所有類的父類,每個類都直接或間接繼承自該類。2、 Object類中的equals()方法比較的是內存地址值,和"=”比較結果一致。底層代碼如下:public boolean equals(Object obj) retu
33、rn (this = obj);實際開發(fā)中很少比較內存地址值,所以我們常常會根據(jù)自身需求重寫equals()方法。案例4-13 多態(tài)的作用一、案例描述1、考核知識點編號:名稱:多態(tài)2、練習目標?了解多態(tài)的概念、多態(tài)的好處和弊端?掌握如何實現(xiàn)多態(tài)3、需求分析在Java中為了實現(xiàn)多態(tài),允許使用一個父類類型的變量來引用一個子類類型的對象,根據(jù)被引用 子類對象特征的不同,得到不同的運行結果。多態(tài)提高代碼了的擴展性和可維護性。為了幫助初學者 掌握如何實現(xiàn)多態(tài),本案例將實現(xiàn)一個多態(tài)程序來演示如何實現(xiàn)多態(tài)。4、設計思路(實現(xiàn)原理)1) 編寫Animal接口,接口中定義sleep()方法。2) Cat類實現(xiàn)
34、Animal接口的方法,并定義另一個方法catchMouse()3) 編寫測試類Example13,使Cat對象指向父類 Animal的引用,并通過該引用調用sleep()方法。二、案例實現(xiàn)1、編寫Animal接口及其實現(xiàn)類 Cat。代碼如下:interface Animal void sleep();class Cat implements Animal void catchMouse() (”抓老鼠");public void sleep() (”睡覺");2、 定義測試類 Example13, Cat對象指向Animal引用,并使用父類Animal引用調用sleep(
35、)方法。代 碼如下:public class Example13 public static void main(String args) / 多態(tài)Animal animal = new Cat(); animal.sleep();運行結果如圖4-13所示。圖4-13運行結果三、案例總結1、 多態(tài)是指對象在不同時刻表現(xiàn)出來的不同狀態(tài),在Java中,允許使用一個父類類型的變量來引用 一個子類類型的對象。2、多態(tài)的前提:(1) 要有繼承關系。(2) 要有方法重寫。(3) 要有父類引用指向子類對象。3、多態(tài)的好處是提高代碼的擴展性和可維護性。4、多態(tài)的弊端是父類或者接口只能調用自己具備的成員,不能訪
36、問子類特有的成員。案例4-14對象的類型轉換、案例描述1、考核知識點編號:名稱:對象的類型轉換2、練習目標?掌握如何實現(xiàn)對象的類型轉換3、需求分析在多態(tài)的學習中,涉及到將子類對象當做父類類型使用的情況,這時進行強制類型轉換可能會出 現(xiàn)出錯。為了讓初學者熟悉對象的類型轉換,本案例將演示一個子類與父類之間類型轉換過程中出現(xiàn) 的錯誤。編寫一個接口 Animal,接口中定義sleep()方法,編寫兩個類 Cat和Pig分別實現(xiàn)接口,再編寫一 個測試類Example14實現(xiàn)對象的類型轉換。4、設計思路(實現(xiàn)原理)1) 編寫Animal接口,接口中定義 sleep()方法。2) Cat類和Pig類分別實現(xiàn)
37、 Animal接口的方法3) 編寫測試類Example14對對象的類型進行轉換, 使Cat向上轉型為Animal類型,然后再讓Animal 類型轉換為Pig類型。二、案例實現(xiàn)1、編寫Animal接口及其實現(xiàn)類 Cat。代碼如下:interface Animal void sleep();class Cat implements Animal public void sleep() (”貓晚上睡覺");class Pig implements Animal public void sleep() (”豬整天睡覺");2、 定義測試類 Example14, Cat對象指向Ani
38、mal引用,并使用父類Animal引用調用sleep()方法。代 碼如下:public class Example14 public static void main(String args) Animal animal = new Cat();Pig pig = (Pig) animal;pig.sleep();運行結果如圖4-14所示。圖4-14錯誤提示三、案例總結1、向下類型轉換時,需要注意被轉換對象的真實類型是否和需要轉換的對象類型相同,否則容易報 類型轉換異常。2、 Java提供了一個關鍵字instanceof,它可以判斷一個對象是否為某個類(或接口)的實例或者子類實 例,語法格式如
39、下:對象(或者對象引用變量)instanceof 類(或接口)3、進行向上類型轉換,子類對象當做父類類型使用時,不能通過父類變量去調用子類中某些方法, 否則會拋出編譯異常。案例4-15 匿名內部類、案例描述1、考核知識點編號:名稱:匿名內部類2、練習目標? 了解什么是匿名內部類?掌握如何使用匿名內部類3、需求分析在學習接口時,如果方法的參數(shù)被定義為一個接口類型,那么就需要定義一個類來實現(xiàn)接口。除 此之外,還可以使用匿名內部類來實現(xiàn)接口。為了讓初學者能更好地理解什么是匿名內部類,本案例 將演示如何實現(xiàn)一個匿名內部類。4、設計思路(實現(xiàn)原理)1 )設計一個In ter接口,接口中定義 show()
40、和method。方法。2) 設計一個 Outer類,在類的function()方法中使用匿名內部類實現(xiàn)Inter接口并實例化,并調用 show()和 method()方法。3) 最后編寫一個測試類Example15,創(chuàng)建Outer的對象并調用function。方法。、案例實現(xiàn)1、編寫Inter接口及Outer類,使用匿名內部類實現(xiàn)接口并創(chuàng)建對象。代碼如下:interface Inter void show();void method();class Outer void function。Inter i = new Inter() public void show() public void
41、method() ;i. show();i.method();2、定義測試類 Example15。代碼如下:public class Example15 public static void main(String args) Outer o = new Outer(); o.function();運行結果如圖4-15所示。圖4-15運行結果三、案例總結1、匿名內部類的格式,具體如下:new父類(參數(shù)列表)或 父接口 ()/匿名內部類實現(xiàn)部分2、匿名內部類是實現(xiàn)接口的一種簡便寫法,在程序中不一定非要使用匿名內部類。3、什么時候使用匿名內部類:通常在使用方法是接口類型參數(shù),并該接口中的方法不超過
42、三個時, 可以將匿名內部類作為參數(shù)傳遞。4、內部類:(1) 將一個類B定義在另一個類 A的里面,那么B類就稱為內部類(嵌套類),內部類定義在成員位置 上。(2) 內部類可以直接訪問外部類中的成員,包括私有成員,而外部類要訪問內部類中的成員必須要建 立內部類的對象。案例 4-16 try.catch 語句一、案例描述1、考核知識點 編號:名稱:try.catch 和 fin ally2、練習目標? 掌握如何使用try.catch語句進行異常處理3、需求分析Java中提供了一種對異常進行處理的方式異常捕獲,異常捕獲通常使用trycatch語句。為了讓初學者熟悉trycatch語句,本案例將演示如何
43、使用try.catch語句處理遍歷時可能出現(xiàn)的數(shù)組角標越界異常。4、設計思路(實現(xiàn)原理)1)編寫測試類 Example16 ,2) 在類Example16中定義名為arr的int類型一維數(shù)組,遍歷數(shù)組輸出每次遍歷出的值,結束輸 出"over”。2)使用trycatch語句處理遍歷時可能出現(xiàn)的數(shù)組角標越界異常,如果出現(xiàn)異常輸出“角標越界、案例實現(xiàn)public class Example16 public static void main(String args) int arr = 1,2, 3, 4, 5 ;try 程序繼續(xù)向下執(zhí)行.");角標越界");運行結果如
44、圖4-16所示。圖4-16運行結果三、案例總結try1、 try代碼塊中編寫可能發(fā)生異常的Java語句,catch代碼塊中編寫針對異常進行處理的代碼。在 代碼塊中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的。2、 可能發(fā)生多個異常時,可以使用多個try.catch或者用一個try多個catch。3、Throwable:是異常體系的超類.卜-Error重大的錯誤,這個問題發(fā)生后,一般我們處理不了,一般不處理,而是要程序進行 修正。(內存溢出)(異常處理)卜-Exception可以處理的問題,這個問題需要我們編寫針對性的代碼進行處理。案例4-17 finally語句、案例描述1、考核知識點編號:名稱:t
45、ry.catch 和 fin ally2、練習目標? 掌握如何使用fin ally語句3、需求分析catch語句在程序中,有時候我們希望有些語句無論程序是否發(fā)生異常都要執(zhí)行,這時就可以在try -語句后,加一個fin ally代碼塊。為了讓初學者熟悉 fin ally代碼塊,本案例將演示如何使用 fin ally 來保證不論是否異常都輸出一句話。4、設計思路(實現(xiàn)原理)1)編寫 Example17 類10/0,2)在main方法中使用tycatchfinally語句,其中try語句塊中編寫可能發(fā)生異常的語句如果不異常輸出“程序繼續(xù)”,如果異常在catch語句塊中會輸出“出異常類”3) 在fin
46、 ally語句塊中輸出“釋放資源”,保證保證不論是否異常一定輸出此語句、案例實現(xiàn)public class Example17 public static void main(String args) try / 0);/以下3行代碼不執(zhí)行。try中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的程序繼續(xù)");System.exit(0);return; catch (ArithmeticException e) e.printStackTrace();(”出異常了 ”);return; finally /finally語句均會執(zhí)行,除非在這之前執(zhí)行System.exit(0); 退出了 JVM
47、釋放資源");運行結果如圖4-17所示。圖4-17錯誤提示三、案例總結fin ally中的代碼塊在一種情無論是否發(fā)生異常,fin ally代碼塊是一定會執(zhí)行的。但是需要注意的是, 況下不會執(zhí)行,那就是在執(zhí)行到fin ally語句之前執(zhí)行了System.exit(O)語句。案例4-18 throws 關鍵字、案例描述1、考核知識點編號:名稱:throws關鍵字2、練習目標? 掌握如何使用throws關鍵字3、需求分析Java中允許在方法的后面使用throws關鍵字對外聲明該方法有可能發(fā)生的異常,這樣調用者在調用方法時,就明確地知道該方法有異常,并且必須在程序中對異常進行處理,否則編譯無
48、法通過。為 了讓初學者熟悉throws關鍵字,本案例將演示如何使用throws關鍵字。4、設計思路(實現(xiàn)原理)1) 編寫一個類 Example182) 在該類中定義方法 div()用于進行除法運算,運算前對被除數(shù)進行判斷,如果等于0,使用throws 拋出異常對象,否則進行正常的除法運算。3) 由于throw拋出了非運行時異常,為了保證編譯通過,我們需要在方法名后面使用throws聲明拋 出異常類。2)在main方法中調用div()方法,并通過trycatch語句處理拋出的異常。、案例實現(xiàn)public class Example18 public static void main(String
49、 args) (”除法運算開始");try div(1,0); catch (Exception e) (”處理運算異常");(”除法運算結束”);public static int div(int x, int y) throws Exception /如果除數(shù)傳遞了0進來,這個程序就岀現(xiàn)了異常if (y = 0) /發(fā)生異常自己不處理,誰調用誰處理/需要在方法上進行拋出:throws 異常類throw new Exception();return x / y;運行結果如圖4-18所示。C: *LTXKDOTSsystextiLcFcuckaticExaPiplclS:刊
50、-nUI圖4-18運行結果三、案例總結1、throws關鍵字聲明拋出異常的語法格式如下:修飾符 返回值類型 方法名(參數(shù)1,參數(shù)2.)throws ExceptionType1,ExceptionType2.2> throws關鍵字需要寫在方法聲明的后面,throws后面需要聲明方法中發(fā)生異常的類型,通常將這種做法稱為方法聲明拋出一個異常。案例4-19自定義異常、案例描述1、考核知識點編號:名稱:自定義異常2、練習目標? 掌握如何自定義異常3、需求分析Java中定義的異常有限,如果想描述程序中特有的異常情況,就需要自定義異常。為了讓初學者 熟悉自定義異常,本案例將自定義一個名為MyExc
51、eption的異常類來演示如何自定義異常。4、設計思路(實現(xiàn)原理)1) 自定義名為 MyException的異常類,繼承自Exception類。2) 在Example19類中進行除法運算,判斷當除數(shù)為零時,拋出自定義的異常類3) 在main()方法中處理異常。、案例實現(xiàn)1、編寫自定義異常類,代碼如下: class MyException extends Exception private int number;MyException(String message) super(message);MyException(String message, int number) super(mess
52、age); this.number = number;public int getNumber() return number;2、拋出異常和處理異常,代碼如下:public class Example19 public static void main(String args) try divide(20, 0); catch (MyException my) (”你給的除數(shù)是:"+ my.getNumber() + ",而我們要求是:"+ my.getMessage();public static int divide(int a, int b) throws MyException if (b = 0) throw new
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版多房產(chǎn)離婚協(xié)議書-2025年度家庭財產(chǎn)分割實施流程2篇
- 二零二五年度餐飲業(yè)餐飲店裝修設計與施工服務合同2篇
- 二零二五版廣告牌廣告位租賃與廣告效果分析合同3篇
- 二零二五年度鋼板租賃及節(jié)能改造服務合同2篇
- 二零二五版房屋抵押借款合同及借款收據(jù)范本3篇
- 二零二五年度軟裝方案創(chuàng)意設計合同2篇
- 二零二五年度火鍋店原料采購及質量控制合同范本3篇
- 二零二五版跨境電商個人合伙退伙合同范本3篇
- 二零二五年度頂賬房買賣合同備案及注銷協(xié)議3篇
- 二零二五版綠色建筑項目墊資合同范本共3篇
- 《疥瘡的防治及治療》課件
- Unit4 What can you do Part B read and write (說課稿)-2024-2025學年人教PEP版英語五年級上冊
- 2025年MEMS傳感器行業(yè)深度分析報告
- 《線控底盤技術》2024年課程標準(含課程思政設計)
- 學校對口幫扶計劃
- 倉庫倉儲安全管理培訓課件模板
- 風力發(fā)電場運行維護手冊
- 《3-6歲兒童學習與發(fā)展指南》專題培訓
- 河道旅游開發(fā)合同
- 情人合同范例
- 建筑公司勞務合作協(xié)議書范本
評論
0/150
提交評論