实验10 异常处理
一、 实验目的
? 掌握异常、异常类的概念;
? 熟悉Java的异常处理机制,能够使用try?catch?finally语句捕获、
处理异常;
? 熟悉异常类的自定义方法。
二、 实验步骤
1、 编译、运行code目录下的A.java程序,并回答下列问题: 1) 该程序能否编译通过?
2) 该程序能否正常结束?为什么?
A2.java是A.java的改进版本,它增加了try?catch?语句来处理异常,编译、运行该程序,并回答下列问题: 3) 改进后的程序能够正常结束? 4) try?catch?语句的基本格式怎样?
5) 对照A.java程序的运行,请问引入异常处理机制后会给程序运行带来哪些方面的改进?
2、 程序填空:
class Lab22 {
public static void main(String args[]){ try{ int x=68; int y=Integer.parseInt(args[0]); int z=x/y; System.out.println(\的值是\ }catch(___________(1)_____________ ){ System.out.println(\缺少命令行参数。\ }catch(___________(2)_____________){ System.out.println(\参数类型不正确。\ }catch(___________(3)_____________){
1
System.out.println(\算术运算错误。\ }finally{ System.out.println(\程序执行完!\ } } }
有用提示:
? ArithmeticException:除数为0时的算术异常
? NullPointerException:没有给对象分配内存空间,而又去访问对象的空指针
异常
? FileNotFoundException:找不到文件的异常
? ArrayIndexOutOfBoundsException:数组元素下标越界异常 ? NumberFormatException:数据格式不正确异常
3、 下面是一个自定义异常类调用的程序,请根据程序上下文填充所缺内容:
//自定义异常类MotorException,它继承了Exception类 class MotorException extends __________(1)____________{ public MotorException(){super();}
public MotorException(String s){super(s);} }
class Car{
private float speed= 0;
private float MAX_V = 300;
//说明调用该方法可能抛出MotorException异常
public void accelerate(float inc) __________(2)___________ { if(speed+inc > MAX_V){ //抛出MotorException异常实例,提示“发动机将被毁坏!” __________(3)___________; }else{ speed+=inc; } } }
class Test{
public static Car car;
2
}
public static void main(String args[]){ car= new Car(); __(4)___{ //可能引发异常的块 for(;;) car.accelerate(0.5f); }____(5)_____ (MotorException me){ //捕获、处理异常 System.out.println(\ } }
4、根据要求,编写程序:
从命令行中输入一个参数,调用java.lang.Math类中的sqrt()方法计
算该数的平方根,对其中可能引发的异常进行处理。
有用提示:
? 当未输入命令行参数时,引发ArrayIndexOutOfBoundsException异常 ? 当输入的命令行参数格式不正确时,引发NumberFormatException异常 ? 输入的数据小于0时,计算的平方根结果为NaN,此处不会引发异常,可
用if语句进行判断,并调用System.exit(0)退出。
3