Java面向对象程序设计第2版第6章_内部类与异常类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
try { 包含可能发生异常的语句
} catch(ExceptionSubClass1 e) {
… } catch(ExceptionSubClass2 e) {
… }
例子4给出了try~catch语句的用法,程序运行效果如图6.4
2020/8/24
9
6.3.2 自定义异常类
我们也可以扩展Exception类定义自己的异常类, 然后规定哪些方法产生这样的异常。
下列代码就是用实现了Computable接口的类(匿名类)创建对 象:
new Computable() { 实现接口的匿名类的类体
};
例子3演示了和接口有关的匿名类的用法,运行效果如图6.3。
2020/8/24
7
6 .3 异常类
所谓异常就是程序运行时可能出现一些错误,比 如试图打开一个根本不存在的文件等,异常处理将会 改变程序的控制流程,让程序有机会对错误作出处理。
2020/8/24
4
6.2 匿名类
6.2.1 和子类有关的匿名类
Java允许我们直接使用一个类的子类的类体创建 一个子类对象。
创建子类对象时,除了使用父类的构造方法外还有 类体,此类体被认为是一个子类去掉类声明后的类体, 称作匿名类。
假设Bank是类,那么下列代码就是用Bank的一个子 类(匿名类)创建对象:
异常对象可以调用如下方法得到或输出有关异常 的信息:
public String getMessage(); public void printStackTrace(); public String toString();
2020/8/24
8
6.3.1 try~catch语句
Java使用try~catch语句来处理异常,将可能出现的异常操作放 在try~catch语句的try部分,将发生异常后的处理放在catch部分。 try~catch语句的格式如下:
本节通过一个例子熟悉带finally子语句的try~catch语句,语 法格式如下:
try{ } catch(ExceptionSubClass e){ } finally{ }
其执行机制是:在执行try~catch语句后,执行finally子语句,也 就是说,无论在try部分是否发生过异常,finally子语句都会被执行。 但需要注意以下两种特殊情况:
assert booleanExpression; assert booleanExpression:messageException;
2020/8/24
14
例子7
例子7在计算若干个正数的和时使用了断言语句,运行效果 如图6.7。代码链接
2020/8/24
15
6.6 小结
1.Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类成为内部类的外嵌类。
一个方法在声明时可以使用throws关键字声明要产 生的若干个异常,并在该方法的方法体中具体给出产生 异常的操作,即用相应的异常类创建对象,并使用 throw关键字抛出该异常对象,导致该方法结束执行。
注:throw是Java的关键字,该关键字的作用就是抛出异常. throw和throws是两个不同的关键字。
内部类仅供它的外嵌类使用,其他类不可以用某个类的内 部类声明对象。
2020/8/24
3
例子1
某种类型的农场饲养了一种特殊种类的牛,但不希望其他 农场饲养这种特殊种类的牛,那么这种类型的农场就可以将创 建这种特殊种牛的类作为自己的内部类。
下面的例子1(Example6_1.java)中有一个RedCowForm(红 牛农场)类,该类中有一个名字为RedCow(红牛)的内部类。 程序运行效果如图6.1。
《Java面向对象程序设计》第2版 第6章
内部类与异常类
配合< Java面向对象程序设计>第2版 例子源代码一起使用
2020/8/24
1
导读
2020/8/24
2
6.1 内部类
类可以有两种重要的成员:成员变量和方法,实际上Java 还允许类可以有一种成员:内部类。
Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类成为内部类的外嵌类。 内部类和外嵌类之间的重要关系如下。 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中 的方法也可以调用外嵌类中的方法。 内部类的类体中不可以声明类变量和类方法。外嵌类的类体 中可以用内部类声明对象,作为外嵌类的成员。
2020/8/24
10
例子5
People类中有一个设置age的方法,如果向该方法传递小于1 或大于160的整数,方法就抛出异常。程序运行效果如图6.5。 Example6_5.java People.java IntegerException.java
2020/8/24
11
6.4 finally子语句
如果在try~catch语句中执行了return语句,那么finally子语句仍 然会被执行。
try~catch语句中执行了程序退出代码,即执行System.exit(0);, 则不执行finally子语句。
2020/8/24
12
例子6
例子6中模拟向货船上装载集装箱,如果货船超重,那么货 船认为这是一个异常,将拒绝装载集装箱,但无论是否发生异 常,货船都需要正点启航。运行效果如图6.6。代码链接
2020/8/24
13
6.5 断言
断言语句用于调试代码阶段。在调试代码阶段让 断言语句发挥作用,这样就可以发现一些致命的错误, 当程序正式运行时就可以关闭断言语句,但仍把断言 语句保留在源代码中,如果以后应用程又需要调试, 可以重新启用断言语句。
使用关键字assert声明一条断言语句,断言语句有 以下两种格式:
new Bank () { 匿名类的类体
};
2020/8/24
Fra Baidu bibliotek
5
例子2
下面的例子2中,向一个方法的参数传递了一个匿名类的对 象,并用匿名类创建了一个对象。运行效果如图6.2。
Example6_2.java 程序运行效果如图6.2。
2020/8/24
6
6.2.2 和接口有关的匿名类
假设Computable是一个接口,那么,Java允许直接用接口名和 一个类体创建一个匿名对象,此类体被认为是实现了Computable 接口的类去掉类声明后的类体,称作匿名类。
} catch(ExceptionSubClass1 e) {
… } catch(ExceptionSubClass2 e) {
… }
例子4给出了try~catch语句的用法,程序运行效果如图6.4
2020/8/24
9
6.3.2 自定义异常类
我们也可以扩展Exception类定义自己的异常类, 然后规定哪些方法产生这样的异常。
下列代码就是用实现了Computable接口的类(匿名类)创建对 象:
new Computable() { 实现接口的匿名类的类体
};
例子3演示了和接口有关的匿名类的用法,运行效果如图6.3。
2020/8/24
7
6 .3 异常类
所谓异常就是程序运行时可能出现一些错误,比 如试图打开一个根本不存在的文件等,异常处理将会 改变程序的控制流程,让程序有机会对错误作出处理。
2020/8/24
4
6.2 匿名类
6.2.1 和子类有关的匿名类
Java允许我们直接使用一个类的子类的类体创建 一个子类对象。
创建子类对象时,除了使用父类的构造方法外还有 类体,此类体被认为是一个子类去掉类声明后的类体, 称作匿名类。
假设Bank是类,那么下列代码就是用Bank的一个子 类(匿名类)创建对象:
异常对象可以调用如下方法得到或输出有关异常 的信息:
public String getMessage(); public void printStackTrace(); public String toString();
2020/8/24
8
6.3.1 try~catch语句
Java使用try~catch语句来处理异常,将可能出现的异常操作放 在try~catch语句的try部分,将发生异常后的处理放在catch部分。 try~catch语句的格式如下:
本节通过一个例子熟悉带finally子语句的try~catch语句,语 法格式如下:
try{ } catch(ExceptionSubClass e){ } finally{ }
其执行机制是:在执行try~catch语句后,执行finally子语句,也 就是说,无论在try部分是否发生过异常,finally子语句都会被执行。 但需要注意以下两种特殊情况:
assert booleanExpression; assert booleanExpression:messageException;
2020/8/24
14
例子7
例子7在计算若干个正数的和时使用了断言语句,运行效果 如图6.7。代码链接
2020/8/24
15
6.6 小结
1.Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类成为内部类的外嵌类。
一个方法在声明时可以使用throws关键字声明要产 生的若干个异常,并在该方法的方法体中具体给出产生 异常的操作,即用相应的异常类创建对象,并使用 throw关键字抛出该异常对象,导致该方法结束执行。
注:throw是Java的关键字,该关键字的作用就是抛出异常. throw和throws是两个不同的关键字。
内部类仅供它的外嵌类使用,其他类不可以用某个类的内 部类声明对象。
2020/8/24
3
例子1
某种类型的农场饲养了一种特殊种类的牛,但不希望其他 农场饲养这种特殊种类的牛,那么这种类型的农场就可以将创 建这种特殊种牛的类作为自己的内部类。
下面的例子1(Example6_1.java)中有一个RedCowForm(红 牛农场)类,该类中有一个名字为RedCow(红牛)的内部类。 程序运行效果如图6.1。
《Java面向对象程序设计》第2版 第6章
内部类与异常类
配合< Java面向对象程序设计>第2版 例子源代码一起使用
2020/8/24
1
导读
2020/8/24
2
6.1 内部类
类可以有两种重要的成员:成员变量和方法,实际上Java 还允许类可以有一种成员:内部类。
Java支持在一个类中声明另一个类,这样的类称作内部类, 而包含内部类的类成为内部类的外嵌类。 内部类和外嵌类之间的重要关系如下。 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中 的方法也可以调用外嵌类中的方法。 内部类的类体中不可以声明类变量和类方法。外嵌类的类体 中可以用内部类声明对象,作为外嵌类的成员。
2020/8/24
10
例子5
People类中有一个设置age的方法,如果向该方法传递小于1 或大于160的整数,方法就抛出异常。程序运行效果如图6.5。 Example6_5.java People.java IntegerException.java
2020/8/24
11
6.4 finally子语句
如果在try~catch语句中执行了return语句,那么finally子语句仍 然会被执行。
try~catch语句中执行了程序退出代码,即执行System.exit(0);, 则不执行finally子语句。
2020/8/24
12
例子6
例子6中模拟向货船上装载集装箱,如果货船超重,那么货 船认为这是一个异常,将拒绝装载集装箱,但无论是否发生异 常,货船都需要正点启航。运行效果如图6.6。代码链接
2020/8/24
13
6.5 断言
断言语句用于调试代码阶段。在调试代码阶段让 断言语句发挥作用,这样就可以发现一些致命的错误, 当程序正式运行时就可以关闭断言语句,但仍把断言 语句保留在源代码中,如果以后应用程又需要调试, 可以重新启用断言语句。
使用关键字assert声明一条断言语句,断言语句有 以下两种格式:
new Bank () { 匿名类的类体
};
2020/8/24
Fra Baidu bibliotek
5
例子2
下面的例子2中,向一个方法的参数传递了一个匿名类的对 象,并用匿名类创建了一个对象。运行效果如图6.2。
Example6_2.java 程序运行效果如图6.2。
2020/8/24
6
6.2.2 和接口有关的匿名类
假设Computable是一个接口,那么,Java允许直接用接口名和 一个类体创建一个匿名对象,此类体被认为是实现了Computable 接口的类去掉类声明后的类体,称作匿名类。