#一、内部类(Inner class)
定义:在Java中,允许一个类的定义位于另一个类的内部,前者称谓内部类,后者称为外部类
1.内部类的分类
- 成员内部类:在类内部直接定义的类(可分为静态和非静态内部类)
- 一方面,作为外部类的成员
- 调用外部类的结构(方法、属性)
- 调用外部类的属性和方法时,需要完整路径 Person.this.属性
- 可以被四种不同的权限修饰
- 另一方面,作为一个类
- 可以定义属性方法和构造器
- 可以用final修饰,表示此类不能被继承;不适用final,则此内部类可以被继承
- 可以用abstract修饰
- 局部内部类:方法内、代码块内、构造器内
- 注意点1:在局部内部类的方法中,如果需要调用局部内部类所声明的方法中的局部变量的话,必须是final修饰的变量
2. 关于内部类,需要关注三个点
- 如何实例化成员内部类的对象
Person.Don dog = new Person.Dog(); // 静态内部类的实例化方式
Person.Bird bird = new Person().new Bird(); // 非静态内部类的实例化方式
- 如何在成员内部类中区分调用外部类的结构
System.out.println(name); // 直接调用形参
System.out.println(this.name); // 调用内部类的非静态属性
System.out.println(Person.this.name); // 调用外部类的非静态属性
- 开发中,局部内部类的使用
public Comparable getComparable(){
// 方式一:
// 内部类实现接口
class MyComparable implements Comparable{
// 重写接口中的方法
}
return new MyComparable(); // 创建并返回该类的对象
// 方式二:匿名类
return new Comparable(){
// 重写接口中的方法
}
}
二、异常处理
1. Java程序在执行过程中所发生的异常时间可分为两类
- Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理
- Exception:其它因编程错误或偶然外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
- 数组角标越界
2. 异常处理:抓抛模型
- 过程一:"抛":程序正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此抛出,一旦抛出对象以后,其后代码就不再执行;
- 过程二:"抓":可以理解为异常的处理方式,
- try...catch...finally:
- throws: