第4章面向对象(下)_补充案例课件 联系客服

发布时间 : 星期一 文章第4章面向对象(下)_补充案例课件更新完毕开始阅读

博学谷——让IT教学更简单,让IT学习更有效

类型转换异常(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 { }

class Outer {

void function() {

Inter i = new Inter() {

public void show() { }

public void method() {

System.out.println(\

21

System.out.println(\

void show(); void method();

博学谷——让IT教学更简单,让IT学习更有效

}

}

};

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和finally

22

博学谷——让IT教学更简单,让IT学习更有效

2、 练习目标

? 掌握如何使用try...catch语句进行异常处理

3、 需求分析

Java中提供了一种对异常进行处理的方式——异常捕获,异常捕获通常使用try…catch语句。为了让初学者熟悉try…catch语句,本案例将演示如何使用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(arr[x]);

System.out.println(\程序继续向下执行...\

} catch (ArrayIndexOutOfBoundsException e) { }

System.out.println(\

System.out.println(\角标越界\

运行结果如图4-16所示。

图4-16 运行结果

三、案例总结

1、try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。在try

代码块中,发生异常语句后面的代码是不会被执行的。

23

博学谷——让IT教学更简单,让IT学习更有效

2、可能发生多个异常时,可以使用多个try...catch或者用一个try多个catch。 3、 Throwable:是异常体系的超类. |--Error 重大的错误,这个问题发生后,一般我们处理不了,一般不处理,而是要程序进行修正 。(内存溢出)

|--Exception 可以处理的问题,这个问题需要我们编写针对性的代码进行处理。(异常处理)

案例4-17 finally语句 一、案例描述

1、 考核知识点 编 号:00104012

名 称:try...catch和finally 2、 练习目标

? 掌握如何使用finally语句

3、 需求分析

在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在try…catch语句后,加一个finally代码块。为了让初学者熟悉finally代码块,本案例将演示如何使用finally语句来保证不论是否异常都输出一句话。

4、 设计思路(实现原理) 1) 编写Example17类

2) 在main方法中使用try…catch…finally…语句,其中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;

e.printStackTrace();

System.out.println(\出异常了\return;

} catch (ArithmeticException e) {

} finally {

//finally语句均会执行,除非在这之前执行System.exit(0);退出了JVM

24