目录
1 实验名称
匿名内部类和异常类
2 实验目的
理解并会使用匿名内部子类和跟接口相关的匿名内部类
理解并掌握异常类的处理
继续理解向上转型和接口回调实现多态
熟练代码调试
3 实验源代码
1.Application.java:
import java.util.Arrays;
public class Application {
public static void main(String[] args) {
int[] numbers = new int[5];
// for(int i = 0;i < 6;i++){//赋值
//第6次循环时出错/数组下标越界
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i;
}
System.out.println(Arrays.toString(numbers));//得到或输出有关异常信息
String str = "12345";
// int number = 0;
try {
//parseInt转换成int类型
numbers[5] = Integer.parseInt(str);//[1]无异常//异常选中此语句,Code,Surround With,6.try/catch
System.out.println(numbers[5]);//[1] 12345 反之数组下标越界
}
// catch (Exception e){//所以异常类父类
// System.out.println("nn");
// }
catch (NumberFormatException e) {
// throw new RuntimeException(e);//去掉
System.out.println("您处理的字符串格式上有问题,请重新输入由纯数字构成的字符串");
//try语句出现异常,catch捕获并处理异常
//一个try可跟多个catch
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组元素下标越界了!!!");
}catch (Exception e){//改在这里,处理所有未知的,可能出现的异常
System.out.println("所有未知的,可能出现的异常");
}
finally{
System.out.println("无论前面有没有发生异常,我finally语句都会被执行");
}
}
//类体当中不可直接单独写方法,只成员变量...
}
2.1Application.java:
simulator.playAnimalSound(new Animal() {
@Override
public void cry() {//也要重写
System.out.println("咔嚓咔嚓~");
}
public String giveName(){
return "小熊猫吃竹子";
}
});//new出来的是它Animal的匿名的子类对象,向上转型实现多态
//匿名子类的对象作为playAnimalSound方法的参数
}
4 实验运行结果图
5 总结
关于匿名内部类和异常类,Java支持在一个类中定义另一个类,这样的类称作内部类,内部类中的方法也可以调用外嵌类中的方法。内部类的类体不可以声明类变量和类方法,外嵌类的类体中可以使用内部类声明对象,作为外嵌类成员。匿名类可以继承父类的方法也可以重写父类的方法。使用匿名类时,必然是在某一个类中直接用匿名创建对象,因此匿名类一定是内部类。匿名类可以访问外嵌类中的成员变量和方法,其类体中不可以声明static成员变量和static方法。由于匿名类是一个子类,但没有类名,所以在用它创建对象时,要直接使用父类的构造方法。如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要重写接口中的全部方法。