一、内部类
我们已经知道,类可以有两种重要的成员:成员变量和方法。实际上Java还允许类可以有一种成员:内部类。
Java支持在一个类中声明另外一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类。
内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。
内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。
内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。
二、匿名类
2.1 与子类有关的匿名类
假如没有显示的声明一个类的子类,而又想用子类创建一个对象,那么该如何实现这一个目的呢?
Java允许我们直接使用一个类的子类的类体创建一个子类对象。
也就是说创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类。
假设Bank是类,那么下列代码就是用Bank的一个子类(匿名类)创建对象:
new Bank () {
匿名类的类体
};
匿名类的常用的方式是向方法的参数传值。
void f(A a){
}
2.2 与接口有关的匿名类
假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。
new Computable() {
实现接口的匿名类的类体
} ;
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,对于
void f(ComPutable x) 其中的参数x是接口,那么在调用f时,可以向f的参数x传递一个匿名对象,例如:
f(new ComPutable() {
实现接口的匿名类的类体
})
三、异常类
所谓异常就是程序运行时可能出现一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误作出处理。
异常对象可以调用如下方法得到或输出有关异常的信息:
public String
getMessage();
public void
printStackTrace();
public String
toString();
3.1 try-catch语句
Java使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,将发生异常后的处理放在catch部分。
try~catch语句的格式如下:
try {
包含可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
… …
}
catch(ExceptionSubClass2 e) {
… …
}
3.2 自定义异常类
我们也可以扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常。
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。