




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章补充案例案例4-1 类的继承一、案例描述1、考核知识点编号:名称:类的继承2、练习目标? 了解类继承的意义和作用? 掌握如何实现类的继承3、需求分析在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。为了让初学者熟悉类的继承,本案例将演示类的继承并编写测试类验证子类是否拥有父类的可继承成 员。4、设计思路(实现原理)1)设计两个类 Student和Teacher2)抽取两个类共同的内容(如:吃饭、睡觉)封装到一个类 Person中,各自特有的部分保留在 各自类中。3)让学生类继承 Person类,老师类也继承 Person。4)编写测试类 Example
2、01 ,测试Student类和Teacher是否继承了 Person类的成员。、案例实现1、抽取父类Person,实现继承关系,代码如下: class Person String name;/ 姓名/吃饭的功能void eat() System.out.println("吃饭");/睡觉的功能void sleep() System.out.println("睡觉");class Student extends Person /学号int sid;class Teacher extends Person / 工号int tid;/教课的功能void tea
3、ch() System.out.println("老师教课");2、定义测试类Example01,代码如下:public class Example01public static void main(String口 args) Student s = new Student();s.eat();s.sleep();System.out.println("-");Teacher t = new Teacher();t.eat();t.sleep();t.teach();运行结果如图4-1所示。* 二 Me «uin pliryarrlM
4、1; EjtimU-lirHLIT怩眄忸泠荒岩画骐课图4-1 运行结果三、案例总结1、在Java中,多个类可以继承一个父类,但是一个类不能直接继承多个类,一个类只能有一个直接 父类。2、父类是由子类不断抽取而来的,不断地抽取就形成了体系结构,这个结构称为继承体系结构。3、子类在继承父类的时候,会自动拥有父类所有的成员。4、继承的好处是划分了类的层次性,实现了代码重用、扩展了程序功能。案例4-2方法的重写、案例描述1、考核知识点编号:名称:方法的重写2、练习目标?了解方法重写的意义和作用?掌握如何进行方法重写3、需求分析在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法
5、进行一些修改,即对父类的方法进行重写。为了让初学者掌握方法的重写,本案例将编写一个类NewPhone,该类继承Phone类并对Phone类的call()方法进行重写。4、设计思路(实现原理)1)定义一个类 Phone,编写方法call(),表示打电话功能2)定义一个Phone的子类NewPhone,重写父类call()方法,让它除了打电话功能外还具有开启语 言和关闭语言功能。3)编写一个测试类 Example02 ,分别调用重写前和重写后的call()方法、案例实现1、定义Phone及其子类NewPhone,子类对父类中的call()方法重写,代码如下:class Phone void cal
6、l() System.out.println("打电话"); class NewPhone extends Phone void call() System.out.println("开启语音");super.call(); System.out.println("关闭语音"); 2、定义测试类 Example02,代码如下: public class Example02 public static void main(String口 args) System.out.println("-重写前-");Phone
7、phone = new Phone();phone.call();System.out.println("-重写后-");Phone newPhone = new NewPhone(); newPhone.call();运行结果如图4-2所示。 X“管理员:科今齐示盲叫三江匚露和一治 y#电闭D:一 打.71"不图4-2运行结果三、案例总结1、子类中需要对继承自父类的方法进行一些修改,这时就用到方法重写。2、在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。3、子类方法的访问修饰权限不能小于父类的。4、重写的主要优点是能够定义子类特
8、有的特征。案例4-3 super访问父类成员变量、案例描述1、考核知识点编号:名称:super关键字2、练习目标? 掌握使用super关键字访问父类成员变量3、需求分析子类可以继承父类的非私有成员变量,如果在子类中修改了继承自父类的成员变量的值,再想要访问父类的该成员变量时,可以通过super成员变量来实现。为了让初学者熟悉super关键字的用法,本案例将分别设计 Fu类及其子类Zi,并在Zi类的方法中使用super关键字访问Fu类的成员变量。 4、设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造和一个初始值为20的num成员变量。2) Zi类继承Fu类,在子类中对 num值进行了修
9、改,同时在子类中定义无参构造和一个无返回值 的method()方法,method。方法中使用super关键字调用了 Fu类的num成员变量。3)定义测试类Example03。、案例实现1、编写Fu类及其子类Zi,在Zi类中使用super关键字调用Fu类成员变量,代码如下 class Fu Fu() int num = 20;class Zi extends Fu Zi() int num = 30;/修改 num 的值void method() System.out.println("method");/ super关键字调用父类成员变量System.out.println
10、("Fu类中 num 值为:"+ super.num);System.out.println("Zi类中 num 值为:"+ num);2、定义测试类 Example03,代码如下:class Example03public static void main(String口 args) Zi z = new Zi();z.method();运行结果如图4-3所示。皿:VsaLTiplePackage chapt >j-aua txanple MJFu支Hu”.唯内士 20类口nun值的4ae图4-3运行结果三、案例总结1、使用super关键字调用父
11、类的成员方法。具体格式如下: super. 成员变量2、被调用的父类成员变量,必须是非private的。案例4-4 super访问父类成员方法、案例描述1、考核知识点编号:名称:super关键字2、练习目标? 掌握使用super关键字访问父类成员方法3、需求分析子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,在Java中专门提供了一个 super关键字用于访问父类的成员。为了让初学者熟悉 super关键字的用法,本案例将 分别设计Fu类及其子类Zi,在Zi类的方法中使用super关键字访问Fu类的成员方法。4、设计思路(实现原理)1)编写一个Fu类,在类中定义无参构
12、造和一个无返回值的show()方法。2) Zi类继承Fu类,子类中定义无参构造和一个无返回值的method()方法,method()方法中使用super关键字调用了 Fu类的show()方法。3)定义测试类Example04。、案例实现1、编写Fu类及其子类Zi,在Zi类中使用super关键字调用Fu类成员方法,代码如下: class Fu Fu() void show() System.out.println("Fu show");class Zi extends Fu Zi() void method() System.out.println("Zi meth
13、od");/ super关键字调用父类成员方法super.show();2、定义测试类 Example04,代码如下:class Example04public static void main(String口 args) Zi z = new Zi();z.method();运行结果如图4-4所示。国管度员'命令把示苕卜 sxsduiiti Le Pat kaye c hn* tt?上电4>J«au 嫉 瓜嫉*。1匕 04 土 nethod;u a how图4-4 运行结果三、案例总结1、使用super关键字调用父类的成员方法。具体格式如下: super.成
14、员方法(参数1,参数2 )2、被调用的父类成员方法,必须是非 private的。案例4-5 super访问父类构造方法一、案例描述1、考核知识点 编号:名称:super关键字 2、练习目标?掌握如何在子类构造方法中使用super关键字访问父类构造方法3、需求分析在子类的构造方法中一定会调用父类的某个构造方法,如果想指定调用类父类中的哪个构造方法,可以使用super关键字来实现。为了让初学者掌握super关键字的用法,本案例将分别设计Fu类及其子类Zi,在Zi类的构造方法中使用 super关键字访问Fu类的构造方法。4、设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造。2) Zi类继承
15、Fu类,子类中也定义无参构造方法,在构造方法中使用super关键字调用Fu类的构造方法。3)定义测试类Example05。二、案例实现1、编写Fu类及其子类Zi,在Zi类构造中使用super关键字调用Fu类构造方法,代码如下: class Fu Fu() System.out.println("Fu类构造方法!"); class Zi extends Fu Zi() super();/在子类构造中调用父类构造System.out.println("Zi类构造方法!");2、定义测试类 Example05,代码如下:public class Example
16、05public static void main(String口 args) Zi zi = new Zi();运行结果如图4-5所示。D-XdiiiiuleFeitkaye311?上电4>Jdu疯 Exdibiile85除躁;图4-5运行结果三、案例总结1、通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。2、在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。3、被调用的父类构造方法,必须是非private的。案例4-6 final修饰类一、案例描述1、考核知识点编号:名称:f
17、inal关键字2、练习目标? 了解final关键字修饰类的特点? 掌握final关键字修饰类的用法3、需求分析Java中的类被final关键字修饰后,该类将不可以被继承,也就是不能够派生子类。为了让初学者熟悉final关键字修饰类的用法,本案例将分别设计两个类,一个是使用final关键字修饰的Fu类,另一个是继承Fu类的Zi类,验证final关键字修饰的类是否能被继承。4、设计思路(实现原理)1)编写一个final关键字修饰的Fu类,类体可以为空2)编写Zi类,Zi类继承于Fu类,类体可以为空3)定义测试类Example06。、案例实现1、编写巾nal修饰的Fu类,Zi类继承Fu类,代码如下:
18、 final class Fu /类体为空代码/Zi 类继承final修饰的Fu类class Zi extends Fu /类体为空代码2、定义测试类 Example06,代码如下:public class Example06public static void main(String口 args) Zi zi = new Zi();运行结果如图4-6所示。图4-6运行结果三、案例总结在Java中,被final关键字修饰的类为最终类,不能被其它类继承。案例4-7 final修饰方法、案例描述1、考核知识点编号:名称:final关键字2、练习目标?掌握使用final关键字修饰方法3、需求分析子类
19、可以继承父类的成员方法,并在必要时对方法进行重写,增加了方法的扩展的同时也打破了方法的封装,如果我们希望父类中的某些方法不能被重写,这时就可以使用final关键字来修饰。为了让初学者掌握使用final关键字修饰方法,本案例将分别设计两个类,一个是 Fu类,其中定义了 final 修饰的show()方法,另一个是继承 Fu类的Zi类,在Zi类中对show()方法进行重写。4、设计思路(实现原理)1)编写一个Fu类,类中定义final修饰的show()方法。2)编写Zi类,Zi类继承于Fu类,在Zi类中对show()方法进行重写3)定义测试类 Example07,创建Zi类对象,并调用 Zi类sh
20、ow()方法。、案例实现1、编写Fu类及其子类Zi类,在Zi类中对show()方法重写,代码如下: class Fu /final关键字修饰的方法public final void show() System.out.println("这是绝密资源");class Zi extends Fu /重写父类中final修饰的方法public void show() System.out.println("这是一堆垃圾,给处理了 ");2、定义测试类 Example07,代码如下:public class Example07public static void
21、 main(String口 args) Zi z = new Zi();z.show();运行结果如图4-7所示。图4-7运行结果三、案例总结当一个类的方法被 final关键字修饰后,这个类的子类将不能重写该方法。案例4-8 final修饰局部变量、案例描述1、考核知识点编号:名称:final关键字2、练习目标?掌握使用final关键字修饰局部变量3、需求分析Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。为了让初学者掌握使用final关键字修饰局部变量,本案例将在类的方法中定义一个final修饰的局部变量,并试着对该变量重新赋值
22、。4、设计思路(实现原理)1)编写一个Example08类,类中定义类一个 final修饰的局部变量 age,为其赋初始值为 18。2)为age重新赋值为20。、案例实现1、编写类Example08,代码如下public class Example08public static void main(String口 args) final int age = 18; /第一次可以赋值age = 20;/再次赋值会报错 编译错误,如图 4-8所示。图4-8错误提示三、案例总结final修饰的变量表示常量,一经定义就不能重新赋值。案例4-9 final修饰成员变量、案例描述1、考核知识点编号:名称:
23、final关键字2、练习目标? 掌握使用final关键字修饰成员变量3、需求分析final修饰在Java中,final修饰的变量表示常量,一经定义就不能重新赋值。为了让初学者熟悉 变量的情况,本案例将使用final关键字修饰成员变量,观察其是否能够再次赋值。4、设计思路(实现原理)1)编写一个Fu类,父类中定义一个变量X,并用final关键字修饰变量。2)编写Zi类,Zi类继承于Fu类,在子类中对常量再赋新值。3)定义测试类Example09,观察运行结果。、案例实现1、编写Fu类及其子类Zi类,在Zi类中对X再赋值,代码如下: class Fu /final 修饰的变量,也就是常量publi
24、c final int X = 10;class Zi extends Fu X = 20;/在子类中对常量再赋新值public void method() System.out.println(X);2、定义测试类Example09,代码如下:public class Example09public static void main(String口 args) Zi z = new Zi();z.method();编译错误,结果如图4-9所示。有管叁官箴管程示疔D 黑 s ample Pa© kage Vjchaptc 1*04 > jam ac ExmnploB9 .Jav
25、aExample09. ja.via.s6 !错"1:需识符 >x = 2酊在类中号系星育赋新值Ci个谙谩图4-9错误提示三、案例总结在本案例中Zi类中对变量X再次赋值,运行结果报错。这是因为Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。案例4-10 接口的实现一、案例描述1、考核知识点编号:名称:接口2、练习目标?掌握如何实现接口3、需求分析由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类,并使用implements
26、关键字实现接口中所有的方法。为了上初学者掌握如何实现接口,本案例将设计一个类,使用关键字implements实现Inter接口中的方法。4、设计思路(实现原理)1)设计名为Inter的接口,接口中定义一个初始值为20的num常量和method()抽象方法。2)编写Inter接口的实现类InterImpl ,使用implements关键字实现接口中的方法。3)编写测试类Example10,测试类中对接口的实现类进行实例化,并调用接口中的方法。二、案例实现1、编写接口 Inter, InterImpl类使用implements实现了接口,代码如下:/定义一个接口interface Inter in
27、t num = 20; void method(); / 使用implements关键字实现接口class InterImpl implements Inter void show() System.out.println(num);public void method() System.out.println("InterImpl method");2、定义测试类 Example10,代码如下: class Example10public static void main(String口 args) /通过实现类实例化InterImpl ii = new InterImp
28、l();ii.show();ii.method();运行结果如图4-10所示。D- Xw?ampLeFackaLgeBi*U4>J-ava bxanplellf)20Jntvlnpl n*thod图4-10运行结果三、案例总结1、接口使用inteface关键字来定义。2、接口没有构造方法,接口中的变量缺省都是使用public static巾nal修饰的,即全局常量,接口中的方法都是public abstract修饰的,即抽象方法。3、定义一个类,并使用implements关键字实现接口中的方法,一个类可以实现多个接口。4、由于接口中的方法都是抽象方法,因此不能直接通过实例化对象的方式来调
29、用接口中的方法,需 要在类实现接口后借助类来间接实例化。案例4-11 接口的继承一、案例描述1、考核知识点编号:名称:接口的继承与多实现2、练习目标? 掌握接口继承的方式及其特点3、需求分析在程序中,可以定义一个接口使用extends关键字去继承另一个接口。为了加深初学者对结果的理解,本案例将演示接口与接口、类与接口的继承和实现关系。4、设计思路(实现原理)1)设计接口 Phone代表传统手机,在接口中定义receiveMessages()和call()抽象方法。2)设计接口 SmartPhone代表智能手机,在接口中定义 faceTime()方法,并使用extends关键字继 承Phone接
30、口,使其具有 Phone接口的所有功能。3)设计类MIPhone表示小米手机,类中定义useMIUI()方法,并实现SmartPhone接口的所有方法。4)编写测试类Example11,测试类中对 MIPhone进行实例化,并访问小米手机具有的各种功能。、案例实现1、编写接口 Phone和 SmartPhone、类 MIPhone。代码如下: interface Phone void receiveMessages();void call();interface SmartPhone extends Phone void faceTime();class MIPhone implements
31、SmartPhone public void receiveMessages() System.out.println("接收短息");public void call() System.out.println("语音通话");public void faceTime() System.out.println("视频通话");public void useMIUI() System.out.println("使用 MIUI");2、定义测试类 Example11,代码如下:public class Example1
32、1 public static void main(String口 args) MIPhone miPhone = new MIPhone();miPhone.receiveMessages();miPhone.call();miPhone.faceTime();miPhone.useMIUI();运行结果如图4-11所示。皿月"组话1|1 5在通通MI 啮身用 9:修吉-口|图4-11运行结果三、案例总结extends关键字继接口与接口之间的继承关系,可以是单继承,也可以是多继承;一个接口可以通过 承多个接口,接口之间用逗号隔开。案例 4-12 Object 类、案例描述1、考核知
33、识点编号:名称:Object类2、练习目标? 了解什么是Object类? 掌握Object类中常用方法的使用3、需求分析在JDK中提供了一个 Object类,它是所有类的父类,即每个类都直接或间接继承自该类。Object类自身的equals()方法比较的是内存地址值,相当于“=",但是在实际开发中我们很少比较两个对象的地址值,这时候常常就需要根据自身需求来重写equals()方法。为了方便初学者学习Object类,本案例将演示如何重写 equals()方法。4、设计思路(实现原理)1)设计Student类,定义sid变量表示学号,重写 equals()方法,判断进行比较的两个学生对象
34、学 号是否相同,相同即为同一个学生,否则不是。2)编写测试类 Example12,创建两个 Student的对象Lily和Lucy,并分别调用setter方法为学号 赋值,最后通过打印语句,输出这两个对象通过“二=”和重写后的equals()方法比较后的结果。、案例实现1、编写Student类,重写equals()方法。代码如下: class Student Student() /学号private int sid;public void setSid(int sid) this.sid = sid;public int getSid() return sid;/我们的需求是学号相同的人就是同
35、一个人.public boolean equals(Object obj) /判断是否为当前对象if (this = obj) return true;/为了呈现的健壮性,加入类型判断if (!(obj instanceof Student) return false;Student s = (Student) obj;return (this.sid = s.sid);2、定义测试类 Example12,为学号赋值,并打印使用"="和重写equals()方法的比较结果,代码如public class Example12 public static void main(St
36、ring口 args) Student Lily = new Student();Lily.setSid(200);Student Lucy = new Student();Lucy.setSid(200);System.out.println("Lily = Lucy"+"tt"+(Lily = Lucy);System.out.println("Lily.equals(Lucy)"+"t"+Lily.equals(Lucy); 运行结果如图4-12所示。;管理员:命令提示有凶D=XSdUiiuleFat11?J
37、du裸 Exubiulei2L*ly = Ujc jjIseLi ly * ti q ua In < Lulc夕 >t ruo图4-12运行结果三、案例总结1、Object类是Java中所有类的父类,每个类都直接或间接继承自该类。2、Object类中的equals()方法比较的是内存地址值,和"="比较结果一致。底层代码如下:public boolean equals(Object obj) return (this = obj); 实际开发中很少比较内存地址值,所以我们常常会根据自身需求重写equals()方法。案例4-13 多态的作用一、案例描述1、考核知识
38、点 编号: 名称:多态 2、练习目标 ?了解多态的概念、多态的好处和弊端?掌握如何实现多态3、需求分析在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用 子类对象特征的不同,得到不同的运行结果。多态提高代码了的扩展性和可维护性。为了帮助初学者 掌握如何实现多态,本案例将实现一个多态程序来演示如何实现多态。4、设计思路(实现原理)1)编写Animal接口,接口中定义 sleep()方法。2) Cat类实现 Animal接口的方法,并定义另一个方法catchMouse()3)编写测试类Example13,使Cat对象指向父类 Animal的引用,并通过该引用调
39、用sleep()方法。二、案例实现1、编写Animal接口及其实现类 Cat。代码如下: interface Animal void sleep(); class Cat implements Animal void catchMouse() System.out.println("抓老鼠"); public void sleep() System.out.println("睡觉"); 2、定义测试类 Example13, Cat对象指向Animal引用,并使用父类 Animal引用调用sleep()方法。代 码如下: public class Exam
40、ple13 public static void main(String口 args) / 多态Animal animal = new Cat(); animal.sleep();运行结果如图4-13所示。D cunp 1cPutkage Impt ca Exanplel序觉"C. iTXKDOVSlsirsttnd. exerJ图4-13运行结果三、案例总结1、多态是指对象在不同时刻表现出来的不同状态,在 Java中,允许使用一个父类类型的变量来引用 一个子类类型的对象。2、多态的前提:(1)要有继承关系。(2)要有方法重写。(3)要有父类引用指向子类对象。3、多态的好处是提高代码
41、的扩展性和可维护性。4、多态的弊端是父类或者接口只能调用自己具备的成员,不能访问子类特有的成员。案例4-14对象的类型转换、案例描述1、考核知识点编号:名称:对象的类型转换2、练习目标? 掌握如何实现对象的类型转换3、需求分析在多态的学习中,涉及到将子类对象当做父类类型使用的情况,这时进行强制类型转换可能会出 现出错。为了让初学者熟悉对象的类型转换,本案例将演示一个子类与父类之间类型转换过程中出现 的错误。编写一个接口 Animal,接口中定义sleep()方法,编写两个类 Cat和Pig分别实现接口,再编写一 个测试类Example14实现对象的类型转换。4、设计思路(实现原理)1)编写An
42、imal接口,接口中定义 sleep()方法。2) Cat类和Pig类分别实现 Animal接口的方法3)编写测试类Example14对对象的类型进行转换, 使Cat向上转型为Animal类型,然后再让Animal 类型转换为Pig类型。、案例实现1、编写Animal接口及其实现类 Cat。代码如下: interface Animal void sleep(); class Cat implements Animal public void sleep() System.out.println("猫晚上睡觉"); class Pig implements Animal pu
43、blic void sleep() System.out.println("猪整天睡觉"); 2、定义测试类 Example14, Cat对象指向Animal引用,并使用父类 Animal引用调用sleep()方法。代 码如下: public class Example14 public static void main(String口 args) Animal animal = new Cat(); Pig pig = (Pig) animal; pig.sleep(); 运行结果如图4-14所示。D - X5<AjnipLcF<icka.!L|eExanip
44、lel4Exception Ip threaclJan. 1 aof,CtExoeiom- Cat C4nn&t Jbe cast to Pigat Exajm|>lcl4»nain < Ex«,nip Lc 14 jjnva 317)图4-14错误提示三、案例总结1、向下类型转换时,需要注意被转换对象的真实类型是否和需要转换的对象类型相同,否则容易报 类型转换异常(java.lang.ClassCastException)。2、Java提供了一个关键字instanceof,它可以判断一个对象是否为某个类(或接口)的实例或者子类实 例,语法格式如下:对象
45、(或者对象引用变量)instanceof类(或接口)3、进行向上类型转换,子类对象当做父类类型使用时,不能通过父类变量去调用子类中某些方法, 否则会抛出编译异常。案例4-15 匿名内部类一、案例描述1、考核知识点编号:名称:匿名内部类2、练习目标?了解什么是匿名内部类?掌握如何使用匿名内部类3、需求分析在学习接口时,如果方法的参数被定义为一个接口类型,那么就需要定义一个类来实现接口。除此之外,还可以使用匿名内部类来实现接口。为了让初学者能更好地理解什么是匿名内部类,本案例 将演示如何实现一个匿名内部类。4、设计思路(实现原理)1)设计一个Inter接口,接口中定义 show()和method。
46、方法。2)设计一个 Outer类,在类的function。方法中使用匿名内部类实现Inter接口并实例化,并调用show()和 method()方法。3)最后编写一个测试类Example15,创建Outer的对象并调用function。方法。二、案例实现1、编写Inter接口及Outer类,使用匿名内部类实现接口并创建对象。代码如下: interface Inter void show();void method();class Outer void function。Inter i = new Inter() public void show() System.out.println(&qu
47、ot;show");public void method() System.out.println("method");i.show();i.method();2、定义测试类 Example15。代码如下:public class Example15 public static void main(String口 args) Outer o = new Outer();o.function();运行结果如图4-15所示。isxsdUHLi le Pat kaye cL t?裸 ExdWijjlei 5hod图4-15运行结果三、案例总结1、匿名内部类的格式,具体如
48、下: new父类(参数列表)或 父接口() /匿名内部类实现部分2、匿名内部类是实现接口的一种简便写法,在程序中不一定非要使用匿名内部类。3、什么时候使用匿名内部类:通常在使用方法是接口类型参数,并该接口中的方法不超过三个时, 可以将匿名内部类作为参数传递。4、内部类:_(1)将一个类B定义在另一个类 A的里面,那么B类就称为内部类(嵌套类),内部类定义在成员位置 上。(2)内部类可以直接访问外部类中的成员,包括私有成员,而外部类要访问内部类中的成员必须要建 立内部类的对象。案例4-16trycatch语句一、案例描述1、考核知识点编号:名称:try.catch 和 finally2、练习目标
49、? 掌握如何使用try.catch语句进行异常处理3、需求分析Java中提供了一种对异常进行处理的方式一一异常捕获,异常捕获通常使用trycatch语句。为了让初学者熟悉trycatch语句,本案例将演示如何使用 try.catch语句处理遍历时可能出现的数组角 标越界异常。4、设计思路(实现原理)1)编写测试类 Example16,2)在类Example16中定义名为arr的int类型一维数组,遍历数组输出每次遍历出的值,结束输 出"over"。2)使用try.catch语句处理遍历时可能出现的数组角标越界异常,如果出现异常输出“角标越界”。、案例实现public cla
50、ss Example16 public static void main(String口 args) int arr = 1,2, 3, 4, 5 ;try for (int x = 0; x <= arr.length; x+) System.out.println(arrx);System.out.println("程序继续向下执行."); catch (ArrayIndexOutOfBoundsException e) System.out.println("角标越界");System.out.println("over"
51、);运行结果如图4-16所示。囚 s sounpLcFcLiitJcage GlwLpt&t'04 > jaiva EMainplcitk,一角标越界图4-16运行结果三、案例总结1、try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。在try代码块中,发生异常语句后面的代码是不会被执行的。2、可能发生多个异常时,可以使用多个try.catch或者用一个try多个catch。3、 Throwable:是异常体系的超类.|-Error重大的错误,这个问题发生后,一般我们处理不了,一般不处理,而是要程序进行 修正。(内存溢出)-Exce
52、ption可以处理的问题,这个问题需要我们编写针对性的代码进行处理。(异常处理)案例4-17 finally语句一、案例描述1、考核知识点 编号:名称:trycatch 和 finally2、练习目标? 掌握如何使用finally语句3、需求分析在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在trycatch语句后,加一个finally代码块。为了让初学者熟悉 finally代码块,本案例将演示如何使用finally语句来保证不论是否异常都输出一句话。 4、设计思路(实现原理) 1) 编写 Example17 类 2)在main方法中使用ty catchfinally
53、语句,其中try语句块中编写可能发生异常的语句10/0,如果不异常输出“程序继续”,如果异常在catch语句块中会输出“出异常类” 3)在finally语句块中输出“释放资源”,保证保证不论是否异常一定输出此语句二、案例实现public class Example17 public static void main(String口 args) try System.out.println(10 / 0);/以下3行代码不执行。try中,发生异常语句后面的代码是不会被执行的 System.out.println("程序继续");System.exit(0); return;
54、catch (ArithmeticException e) e.printStackTrace();System.out.println("出异常了 ");return; finally /finally语句均会执行,除非在这之前执行System.exit(0); 退出了 JVMSystem.out.println("释放资源"); 运行结果如图4-17所示。图4-17错误提示三、案例总结finally中的代码块在一种情无论是否发生异常,finally代码块是一定会执行的。但是需要注意的是,况下不会执行,那就是在执行到finally语句之前执行了 Sys
55、tem.exit(O)语句。案例4-18 throws 关键字、案例描述1、考核知识点编号:名称:throws关键字2、练习目标? 掌握如何使用throws关键字3、需求分析Java中允许在方法的后面使用throws关键字对外声明该方法有可能发生的异常,这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。为 了让初学者熟悉throws关键字,本案例将演示如何使用throws关键字。4、设计思路(实现原理)1)编写一个类 Example182)在该类中定义方法 div()用于进行除法运算,运算前对被除数进行判断,如果等于 0,使用throws 抛出异常对象,否则进行正常的除法运算。3)由于throw抛出了非运行时异常,为了保证编译通过,我们需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四个自信的深刻理解试题及答案
- 2025年度高科技研发材料采购订单合同
- 2025年度解除劳动合同证明书范本与操作指南
- 二零二五年度物流园区司机招聘与园区管理协议
- 2025年度环保产业股东合作投资协议
- 2025届山东名校考试联盟3月高考模拟考试数学试题(含答案)
- 2025年度电商合作平台返利合同
- 二零二五年度汽车租赁合同终止及车辆转让协议
- 2024年大学语文考前复习试题及答案
- 如何利用自我评估制定计划
- 计算机体系结构(计算机组成原理)教案
- 2023新能源发电公司网络安全工作奖惩办法
- 英语演讲比赛评分标准-评分表
- 酒店住宿水单标准模板
- 胸腔闭式引流护理技术操作流程及评分标准(参考模板)
- 社会责任法规合规性评价检查表
- 个人汽车押车合同范本
- 2023年R1快开门式压力容器操作考试题库及R1快开门式压力容器操作考试100题(含答案)
- 我国光伏标准体系及发展建议
- 吉塔行星模拟课程
- 山东省聊城市高一上学期期末考试政治试题WORD版含答案
评论
0/150
提交评论