发布时间 : 星期一 文章第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