7.1 内部类
java支持在一个类中声明另一类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类
例如:某种类型的农村饲养了一种特殊种类的牛,但不希望其他农场饲养这种特殊种类的牛,那么这种类型的农场就可以创建这种特殊种牛的类作为自己的内部类
内部类的类体中不可用声明类变量和类方法。外嵌类的类体中可以使用内部类声明对象,作为外嵌类的成员
内部类的使用规则:
声明内部类如同在类中声明方法或变量一样,一个类把内部类看座是自己的成员
外嵌类的类体中可以用内部类声明的对象作为外嵌类的成员
外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法
内部类的类体中不可用声明类变量和方法
外嵌类和内部类在编译时,产生两个.class文件
7.2 匿名类
java允许我们直接使用一个类的子类的类体创建一个子类对象
1、和子类有关的匿名类
创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类
2、和接口有关的匿名类
假设computable是一个接口,那么,java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了computable接口的类去掉类声明后的类体,称作匿名类
7.3 异常类
所谓异常就是程序在运行过程中可能出现的一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理。程序运行出现异常时,java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理
异常对象可以调用如下方法得到或输出有关异常的信息:
public String getMessage();
public void printStackTrace();
public String toString();
7.3.1 try-catch语句
java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,将发生异常后的处理放在catch部分
try-catch语句的格式
try{
包含可能发生异常的语句
}
catch(ExcaptionSubClass1 e){
... ...
}
catch(ExcaptionSubClass2 e){
... ...
}
7.3.1 try-catch语句
带finally子语句的try-catch语句,语法
try{}
catch(ExcaptionSubClass e){}
finally{}
其执行机制是在执行try-catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行
7.3.2 异常的声明
一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫做声明异常。
声明异常的方法:在产生异常的方法名后面加上要抛出(throws)的异常的列表
如:
void cpmpute(int x) throws ArithmeticException{
//这里有异常发生,但是并没有处理
}
7.3.2 自定义异常类
我们也可以扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常。
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出异常,导致该方法结束执行
7.4 断言
断言语句用于调试代码阶段,在调试代码阶段让断言语句发挥作用,这样就可以发现一些致命的错误,当程序正式运行时就可以关闭断言语句,但仍把断言语句保留在源代码中,如果以后应用程序有需要调试,可以重新启用断言语句
使用关键字assert声明一条断言语句,断言语句有一下两种格式
assert booleanExpression;
assert booleanExpression:messageException;
总结
java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类叫内部类的外嵌类。
和某类有关的匿名类就是该类的一个子类,该子类没有明显的用类声明来定义,所以称作匿名类。
java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,当try部分中的某个方法调用发生异常后,try部分立刻结束执行,而转向执行相应的catch部分。

本文总结了Java中的内部类、匿名类和异常处理。内部类是外嵌类的成员,可以访问外嵌类的所有成员。匿名类是直接通过类体创建的子类对象,可以基于类或接口。异常处理通过try-catch语句进行,异常对象提供getMessage()和printStackTrace()等方法获取信息。此外,介绍了如何声明和自定义异常类以及断言的使用。
3268

被折叠的 条评论
为什么被折叠?



