第4章 面向对象(下)_补充案例.doc_第1页
第4章 面向对象(下)_补充案例.doc_第2页
第4章 面向对象(下)_补充案例.doc_第3页
第4章 面向对象(下)_补充案例.doc_第4页
第4章 面向对象(下)_补充案例.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

博学谷让IT教学更简单,让IT学习更有效第四章 补充案例案例4-1 类的继承一、案例描述1、 考核知识点编号:00104001名称:类的继承2、 练习目标 了解类继承的意义和作用 掌握如何实现类的继承3、 需求分析在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。为了让初学者熟悉类的继承,本案例将演示类的继承并编写测试类验证子类是否拥有父类的可继承成员。4、 设计思路(实现原理)1)设计两个类Student和Teacher2)抽取两个类共同的内容(如:吃饭、睡觉)封装到一个类Person中,各自特有的部分保留在各自类中。3)让学生类继承Person类,老师类也继承Person。4)编写测试类Example01,测试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 teach() 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所示。图4-1 运行结果三、案例总结1、在Java中,多个类可以继承一个父类,但是一个类不能直接继承多个类,一个类只能有一个直接父类。2、父类是由子类不断抽取而来的,不断地抽取就形成了体系结构,这个结构称为继承体系结构。3、子类在继承父类的时候,会自动拥有父类所有的成员。4、继承的好处是划分了类的层次性,实现了代码重用、扩展了程序功能。案例4-2 方法的重写一、案例描述1、 考核知识点编号:00104002名称:方法的重写2、 练习目标 了解方法重写的意义和作用 掌握如何进行方法重写3、 需求分析在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。为了让初学者掌握方法的重写,本案例将编写一个类NewPhone,该类继承Phone类并对Phone类的call()方法进行重写。4、 设计思路(实现原理)1)定义一个类Phone,编写方法call(),表示打电话功能 2)定义一个Phone的子类NewPhone,重写父类call()方法,让它除了打电话功能外还具有开启语言和关闭语言功能。 3)编写一个测试类Example02,分别调用重写前和重写后的call()方法二、案例实现1、定义Phone及其子类NewPhone,子类对父类中的call()方法重写,代码如下:class Phone void call() System.out.println(打电话);class NewPhone extends Phone void call() System.out.println(开启语音);super.call();System.out.println(关闭语音);2、定义测试类Example02,代码如下:public class Example02public static void main(String args) System.out.println(-重写前-);Phone phone = new Phone();phone.call();System.out.println(-重写后-);Phone newPhone = new NewPhone();newPhone.call();运行结果如图4-2所示。图4-2 运行结果三、案例总结1、子类中需要对继承自父类的方法进行一些修改,这时就用到方法重写。2、在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。3、子类方法的访问修饰权限不能小于父类的。4、重写的主要优点是能够定义子类特有的特征。案例4-3 super访问父类成员变量一、案例描述1、 考核知识点编号:00104003名称:super关键字2、 练习目标 掌握使用super关键字访问父类成员变量3、 需求分析子类可以继承父类的非私有成员变量,如果在子类中修改了继承自父类的成员变量的值,再想要访问父类的该成员变量时,可以通过super.成员变量来实现。为了让初学者熟悉super关键字的用法,本案例将分别设计Fu类及其子类Zi,并在Zi类的方法中使用super关键字访问Fu类的成员变量。4、 设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造和一个初始值为20的num成员变量。 2)Zi类继承Fu类,在子类中对num值进行了修改,同时在子类中定义无参构造和一个无返回值的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(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所示。图4-3 运行结果三、案例总结1、使用super关键字调用父类的成员方法。具体格式如下:super.成员变量2、被调用的父类成员变量,必须是非private的。案例4-4 super访问父类成员方法一、案例描述1、 考核知识点编号:00104003名称:super关键字2、 练习目标 掌握使用super关键字访问父类成员方法3、 需求分析子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,在Java中专门提供了一个super关键字用于访问父类的成员。为了让初学者熟悉super关键字的用法,本案例将分别设计Fu类及其子类Zi,在Zi类的方法中使用super关键字访问Fu类的成员方法。4、 设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造和一个无返回值的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 method);/ super关键字调用父类成员方法super.show();2、定义测试类Example04,代码如下:class Example04public static void main(String args) Zi z = new Zi();z.method();运行结果如图4-4所示。图4-4 运行结果三、案例总结1、使用super关键字调用父类的成员方法。具体格式如下:super.成员方法(参数1,参数2)2、被调用的父类成员方法,必须是非private的。案例4-5 super访问父类构造方法一、案例描述1、 考核知识点编号:00104003名称:super关键字2、 练习目标 掌握如何在子类构造方法中使用super关键字访问父类构造方法3、 需求分析在子类的构造方法中一定会调用父类的某个构造方法,如果想指定调用类父类中的哪个构造方法,可以使用super关键字来实现。为了让初学者掌握super关键字的用法,本案例将分别设计Fu类及其子类Zi,在Zi类的构造方法中使用super关键字访问Fu类的构造方法。4、 设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造。 2)Zi类继承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 Example05public static void main(String args) Zi zi = new Zi();运行结果如图4-5所示。图4-5 运行结果三、案例总结1、通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。2、在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。3、被调用的父类构造方法,必须是非private的。案例4-6 final修饰类一、案例描述1、 考核知识点编号:00104004名称:final关键字2、 练习目标 了解final关键字修饰类的特点 掌握final关键字修饰类的用法3、 需求分析Java中的类被final关键字修饰后,该类将不可以被继承,也就是不能够派生子类。为了让初学者熟悉final关键字修饰类的用法,本案例将分别设计两个类,一个是使用final关键字修饰的Fu类,另一个是继承Fu类的Zi类,验证final关键字修饰的类是否能被继承。4、 设计思路(实现原理)1)编写一个final关键字修饰的Fu类,类体可以为空 2)编写Zi类,Zi类继承于Fu类,类体可以为空 3)定义测试类Example06。二、案例实现1、编写final修饰的Fu类,Zi类继承Fu类,代码如下: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、 考核知识点编号:00104004名称:final关键字2、 练习目标 掌握使用final关键字修饰方法3、 需求分析子类可以继承父类的成员方法,并在必要时对方法进行重写,增加了方法的扩展的同时也打破了方法的封装,如果我们希望父类中的某些方法不能被重写,这时就可以使用final关键字来修饰。为了让初学者掌握使用final关键字修饰方法,本案例将分别设计两个类,一个是Fu类,其中定义了final修饰的show()方法,另一个是继承Fu类的Zi类,在Zi类中对show()方法进行重写。4、 设计思路(实现原理)1)编写一个Fu类,类中定义final修饰的show()方法。 2)编写Zi类,Zi类继承于Fu类,在Zi类中对show()方法进行重写 3)定义测试类Example07,创建Zi类对象,并调用Zi类show()方法。二、案例实现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 main(String args) Zi z = new Zi();z.show();运行结果如图4-7所示。图4-7 运行结果三、案例总结当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法。案例4-8 final修饰局部变量一、案例描述1、 考核知识点编号:00104004名称:final关键字2、 练习目标 掌握使用final关键字修饰局部变量3、 需求分析Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。为了让初学者掌握使用final关键字修饰局部变量,本案例将在类的方法中定义一个final修饰的局部变量,并试着对该变量重新赋值。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、 考核知识点编号:00104004名称:final关键字2、 练习目标 掌握使用final关键字修饰成员变量3、 需求分析在Java中,final修饰的变量表示常量,一经定义就不能重新赋值。为了让初学者熟悉final修饰变量的情况,本案例将使用final关键字修饰成员变量,观察其是否能够再次赋值。4、 设计思路(实现原理)1)编写一个Fu类,父类中定义一个变量X,并用final关键字修饰变量。 2)编写Zi类,Zi类继承于Fu类,在子类中对常量再赋新值。 3)定义测试类Example09,观察运行结果。二、案例实现1、编写Fu类及其子类Zi类,在Zi类中对X再赋值,代码如下:class Fu /final修饰的变量,也就是常量public 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所示。图4-9 错误提示三、案例总结在本案例中Zi类中对变量X再次赋值,运行结果报错。这是因为Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。案例4-10 接口的实现一、案例描述1、 考核知识点编 号:00104006名 称:接口2、 练习目标 掌握如何实现接口3、 需求分析由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类,并使用implements关键字实现接口中所有的方法。为了上初学者掌握如何实现接口,本案例将设计一个类,使用关键字implements实现Inter接口中的方法。4、 设计思路(实现原理)1)设计名为Inter的接口,接口中定义一个初始值为20的num常量和method()抽象方法。 2)编写Inter接口的实现类InterImpl,使用implements关键字实现接口中的方法。 3)编写测试类Example10,测试类中对接口的实现类进行实例化,并调用接口中的方法。二、案例实现1、编写接口Inter,InterImpl类使用implements实现了接口,代码如下:/定义一个接口interface Inter int 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 InterImpl();ii.show();ii.method();运行结果如图4-10所示。图4-10 运行结果三、案例总结1、接口使用interface关键字来定义。2、接口没有构造方法,接口中的变量缺省都是使用public static final修饰的,即全局常量,接口中的方法都是public abstract修饰的,即抽象方法。3、定义一个类,并使用implements关键字实现接口中的方法,一个类可以实现多个接口。4、由于接口中的方法都是抽象方法,因此不能直接通过实例化对象的方式来调用接口中的方法,需要在类实现接口后借助类来间接实例化。案例4-11 接口的继承一、案例描述1、 考核知识点编 号:00104007名 称:接口的继承与多实现2、 练习目标 掌握接口继承的方式及其特点3、 需求分析在程序中,可以定义一个接口使用extends关键字去继承另一个接口。为了加深初学者对结果的理解,本案例将演示接口与接口、类与接口的继承和实现关系。4、 设计思路(实现原理)1)设计接口Phone代表传统手机,在接口中定义receiveMessages()和call()抽象方法。 2)设计接口SmartPhone代表智能手机,在接口中定义faceTime()方法,并使用extends关键字继承Phone接口,使其具有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 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 Example11 public static void main(String args) MIPhone miPhone = new MIPhone();miPhone.receiveMessages();miPhone.call();miPhone.faceTime();miPhone.useMIUI();运行结果如图4-11所示。图4-11 运行结果三、案例总结接口与接口之间的继承关系,可以是单继承,也可以是多继承;一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。案例4-12 Object类一、案例描述1、 考核知识点编 号:00104008名 称:Object类2、 练习目标 了解什么是Object类 掌握Object类中常用方法的使用3、 需求分析在JDK中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承自该类。Object类自身的equals()方法比较的是内存地址值,相当于“=”,但是在实际开发中我们很少比较两个对象的地址值,这时候常常就需要根据自身需求来重写equals()方法。为了方便初学者学习Object类,本案例将演示如何重写equals()方法。4、 设计思路(实现原理)1)设计Student类,定义sid变量表示学号,重写equals()方法,判断进行比较的两个学生对象学号是否相同,相同即为同一个学生,否则不是。 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;/ 我们的需求是学号相同的人就是同一个人.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(String 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所示。图4-12 运行结果三、案例总结1、Object类是Java中所有类的父类,每个类都直接或间接继承自该类。2、Object类中的equals()方法比较的是内存地址值,和“=”比较结果一致。底层代码如下:public boolean equals(Object obj) return (this = obj); 实际开发中很少比较内存地址值,所以我们常常会根据自身需求重写equals()方法。案例4-13 多态的作用一、案例描述1、 考核知识点编 号:00104009名 称:多态2、 练习目标 了解多态的概念、多态的好处和弊端 掌握如何实现多态3、 需求分析在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。多态提高代码了的扩展性和可维护性。为了帮助初学者掌握如何实现多态,本案例将实现一个多态程序来演示如何实现多态。4、 设计思路(实现原理)1)编写Animal接口,接口中定义sleep()方法。2)Cat类实现Animal接口的方法,并定义另一个方法catchMouse() 3)编写测试类Example13,使Cat对象指向父类Animal的引用 ,并通过该引用调用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 Example13 public static void main(String args) / 多态Animal animal = new Cat();animal.sleep();运行结果如图4-13所示。图4-13 运行结果三、案例总结1、多态是指对象在不同时刻表现出来的不同状态,在Java中,允许使用一个父类类型的变量来引用一个子类类型的对象。2、多态的前提: (1) 要有继承关系。 (2) 要有方法重写。 (3) 要有父类引用指向子类对象。3、多态的好处是提高代码的扩展性和可维护性。4、多态的弊端是父类或者接口只能调用自己具备的成员,不能访问子类特有的成员。案例4-14 对象的类型转换一、案例描述1、 考核知识点编 号:00104010名 称:对象的类型转换2、 练习目标 掌握如何实现对象的类型转换3、 需求分析在多态的学习中,涉及到将子类对象当做父类类型使用的情况,这时进行强制类型转换可能会出现出错。为了让初学者熟悉对象的类型转换,本案例将演示一个子类与父类之间类型转换过程中出现的错误。 编写一个接口Animal,接口中定义sleep()方法,编写两个类Cat和Pig分别实现接口,再编写一个测试类Example14实现对象的类型转换。4、 设计思路(实现原理)1)编写Animal接口,接口中定义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 public 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所示。图4-14 错误提示三、案例总结1、向下类型转换时,需要注意被转换对象的真实类型是否和需要转换的对象类型相同,否则容易报类型转换异常(java.lang.ClassCastException)。2、Java提供了一个关键字instanceof,它可以判断一个对象是否为某个类(或接口)的实例或者子类实例,语法格式如下:对象(或者对象引用变量) instanceof 类(或接口)3、进行向上类型转换,子类对象当做父类类型使用时,不能通过父类变量去调用子类中某些方法,否则会抛出编译异常。案例4-15 匿名内部类一、案例描述1、 考核知识点编 号:00104011名 称:匿名内部类2、 练习目标 了解什么是匿名内部类 掌握如何使用匿名内部类3、 需求分析在学习接口时,如果方法的参数被定义为一个接口类型,那么就需要定义一个类来实现接口。除此之外,还可以使用匿名内部类来实现接口。为了让初学者能更好地理解什么是匿名内部类,本案例将演示如何实现一个匿名内部类。4、 设计思路(实现原理)1)设计一个Inter接口,接口中定义show()和method()方法。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(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所示。图4-15 运行结果三、案例总结1、匿名内部类的格式,具体如下:new 父类(参数列表) 或 父接口() /匿名内部类实现部分2、匿名内部类是实现接口的一种简便写法,在程序中不一定非要使用匿名内部类。3、什么时候使用匿名内部类:通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,可以将匿名内部类作为参数传递。4、内部类:(1) 将一个类B定义在另一个类A的里面,那么B类就称为内部类(嵌套类),内部类定义在成员位置上。(2) 内部类可以直接访问外部类中的成员,包括私有成员,而外部类要访问内部类中的成员必须要建立内部类的对象。案例4-16 try.catch语句一、案例描述1、 考核知识点编 号:00104012名 称:try.catch和finally2、 练习目标 掌握如何使用try.catch语句进行异常处理3、 需求分析Java中提供了一种对异常进行处理的方式异常捕获,异常捕获通常使用trycatch语句。为了让初学者熟悉trycatch语句,本案例将演示如何使用try.catch语句处理遍历时可能出现的数组角标越界异常。4、 设计思路(实现原理)1) 编写测试类Example16,2) 在类Example16中定义名为arr的int类型一维数组,遍历数组输出每次遍历出的值,结束输出“over”。2)使用try.catch语句处理遍历时可能出现的数组角标越界异常,如果出现异常输出“角标越界”。二、案例实现public class 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);运行结果如图4-16所示。图4-16 运行结果三、案例总结1、try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。在try代码块中,发生异常语句后面的代码是不会被执行的。2、可能发生多个异常时,可以使用多个try.catch或者用一个try多个catch。3、Throwable:是异常体系的超类.|-Error 重大的错误,这个问题发生后,一般我们处理不了,一般不处理,而是要程序进行修正 。(内存溢出)|-Exception 可以处理的问题,这个问题需要我们编写针对性的代码进行处理。(异常处理)案例4-17 finally语句一、案例描述1、 考核知识点编 号:00104012名 称:try.catch和finally2、 练习目标 掌握如何使用finally语句3、 需求分析在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在trycatch语句后,加一个finally代码块。为了让初学者熟悉finally代码块,本案例将演示如何使用finally语句来保证不论是否异常都输出一句话。4、 设计思路(实现原理)1) 编写Example17类2) 在main方法中使用trycatchfinally语句,其中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; catch (ArithmeticException e) e.printStackTrace();System.out.println(出异常了);return; finally /finally语句均会执行,除非在这之前执行System.exit(0);退出了JVMSystem.out.println(释放资源);运行结果如图4-17所示。图4-17 错误提示三、案例总结无论是否发生异常,finally代码块是一定会执行的。但是需要注意的是,finally中的代码块在一种情况下不会执行,那就是在执行到finally语句之前执行了System.exit(0)语句。案例4-18 throws关键字一、案例描述1、 考核知识点编 号:00104013名 称:throws关键字2、 练习目标 掌握如何使用throws关键字3、 需求分析Java中允许在方法的后面使用throws关键字对外声明该方法有可能发生的异常,这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。为了让初学者熟悉throws关键字,本案例将演示如何使用throws关键字。4、 设计思路(实现原理)1) 编写一个类Example182) 在该类中定义方法div()用于进行除法运算,运算前对被除数进行判断,如果等于0,使用throws抛出异常对象,否则进行正常的除法运算。3) 由于throw抛出了非运行时异常,为了保证编译通过,我们需要在方法名后面使用throws声明抛出异常类。2)在main方法中调用div()方法,并通过trycatch语句处理抛出的异常。二、案例实现public class Example18 public static void main(String args) System.out.println(除法运算开始);try div(1, 0); catch (Exception e) System.out.println(处理运算异常);System.out.println(除法运算结束);public st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论