基于工作过程的Java程序设计--第5章 Java异常处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
h
5
5.2 自定义异常
• 知识要点
– 异常的抛出和声明
• [实例] 通过用户输入数据实例化Human对 象时,如果用户输入错误,抛出一个异常 并处理。
h
6
• 1.详细设计
– class GenderCharacterException extends Exception{ – 定义无参数的构造方法;
– 2) 求a[i]的倒数
• 语句:
– System.out.println("a["+i+"] 的倒数是:"+1/a[i]);
• 分析:用System.out.println直 接输出1/a[i]的值。
– 3) 输出算术运算异常信息
–
输出算术运算异常信息;
–
}
–
finally{
–
调用countDown()结束;
• 语句:
– Human(String name, String gender,String birth)
– throws GenderCharacterException{
–:
–}
• 分析:如果某方法体内有可能抛出异常,在编写 该方法时,第一行方法名后须用throws声明发生 的异常,这里声明GenderCharacterException。
– void push(Object obj){ – v.addElement(obj); – System.out.print(" PUSH: "+obj); –} – Object pop(){ – Object obj = v.lastElement(); – v.removeElementAt(v.size()-1); – System.out.println(" Pop: "+obj); – return obj; –} –}
p.introduce();
•
if (p.gender.equals("m"))
•
System.out.print("性别:" + "
男");
•
else
•
System.out.print("性别:" + "
女");
•
System.out.println(" 出生日期:
" + p.birth);
•
}
•
– 定义带参数的构造方法;
–}
– public class Human{
– 定义属性变量;
– Human(String name){
– 给this.name赋值;
–}
– Human(String name, String gender,String birth)
– throws GenderCharacterException{
• 语句:
– ExceptionProcess(){
–
初始化a数组;
–}
– countDown(int i){
–
try{
–
求a[i]的倒数;
–
}
– catch(ArithmeticException e){
– a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3;
• 分析:数组长度为4,最后一 个分量是a[3],a[0]初值为0。
是:"+1/a[i]); –} – catch(ArithmeticException e){ – System.out.println("算术运算异常:
"+e.getMessage()); –}
– catch(ArrayIndexOutOfBoundsExceptio n e){
– System.out.println("数组下标超界 异常: "+e.getMessage());
– public static void main(String args[]) {
–
ExceptionProcess
ep = new
ExceptionProcess();
– System.out.println(" ----------第一次调用 -----------");
–
ep.countDown(0);
–
}
– finally{
– System.out.println("调用 countDown()结束");
–}
–}
–}
• 编写测试程序 ExceptionProcessTest,设置适当 的参数i,使得调用方法 countDown()时产生一个 ArrayIndexOutOfBoundsExceptio n异常,并被程序捕获。
– super();
–}
– public GenderCharacterException(String msg){
– super(msg);
–}
• 分析:所有自定义的异常类都是Exception的子类, 这里不论无参数的构造方法还是带参数的构造方 法都通过覆盖Exception的构造方法来实现。
– 2) 声明异常
– if 接收的性别字符是m或f
–
给this.gender赋值;
– else 抛出GenderCharacterException异常;
– 给this.name等赋值;
–}
– void introduce(){
– 输出该对象的name;
–}
–}
• 2.编码实现
– 1) 异常类的构造方法
• 语句:
– public GenderCharacterException(){
常。
• 3) 常见异常类
h
4
6. 问题与思考
• 将本节实例程序修改成可以捕获 ArrayIndexOutOfBoundsException异 常,见下面程序:
– class ExceptionProcess{ – int a[]=new int[4]; – ExceptionProcess(){ – a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; –} – void countDown(int i){ – try{ – System.out.println("a["+i+"]的倒数
– 3) 抛出异常
• 语句:
– if (gender.equals("m")||gender.equals("f"))
–
this.gender=gender;
– else throw (new GenderCharacterException("性别字符不正确! "));
• 分析:"m"表示男,"f"表示女,如果接收到其它 字符时,用throw抛出GenderCharacterException 异常。
• 3.源代码 略.
h
7
4.测试与运行
• 测试程序如下: • public class HumanTest { • public static void main(String
args[]) {
•
try {
•Байду номын сангаас
Human p = new
Human(args[0],args[1],args[2]);
•
catch(GenderCharacterException
e){
• System.out.println(e.getMessage());
•
}
•} •}
h
8
5.技术分析
• throw关键字是用于方法体内部,用来抛出 一个Throwable类型的异常。
• throws关键字用于方法体外部的方法声明 部分,用来声明方法可能会抛出某些异常。
h
9
6. 问题与思考
• 在java.util.Vector基础上封装一 个类VectorStack实现堆栈, VectorStack有压入方法push()和 弹出方法pop(),见下面程序:
– import java.util.Vector; – class VectorStack{ – static final int CAPACITY=5; – Vector v; – VectorStack(){ – v = new Vector(); –}
第5章 Java异常处理
5.1 捕获异常
知识要点
异常的概念和Java异常体系结构 异常的捕获和处理 常见异常类
[实例] 编写一个求某数倒数的程序,一 旦用0做除数,捕获系统产生的异常。
h
1
• 1.详细设计
• 2.编码实现
– class ExceptionProcess{
– 1) 初始化a数组
– 定义整数型数组a;
–
}
–} –}
•
• 语句:
– System.out.println("算术运 算异常: "+e.getMessage());
• 分析:算术异常 ArithmeticException 的 getMessage()方法可以获得异 常的信息。
3.源代码 略.
h
2
4.测试与运行
• 测试程序如下:
– class ExceptionProcessTest {
• 改进该pop()方法,使得在弹出 数据时,如果栈为空,抛出一 个异常。并编写测试程序进行 验证。
h
10
–}
–}
h
3
5.技术分析
• 1) 异常的概念和Java异常体系结构
– 异常是程序运行过程中未按程序的正常流程而 出现的错误。Java把异常当作对象来处理,并 定义一个基类java.lang.Throwable作为所有异 常的超类。
• 2) 异常的捕获和处理
– 凡是有可能发生异常的语句或方法,Java提供 了try-catch(){…}语句来运行、捕获并处理异