实验五 异常处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五异常处理
一、实验目的
1.学会利用Try-catch-finally语句来捕获和处理异常;
2.掌握自定义异常类的方法。
二、实验要求
1.通过编程理解系统异常处理的机制和创建自定义异常的方法。
2.掌握基础类。
三、实验内容
(一)异常处理机制
1. 编写使用try…catch 语句处理异常的程序文件Demo4_1.java,
源代码如下:
public class Demo3_1{
public static void main(String[] arg3) {
System.out.println("这是一个异常处理的例子\n");
try {
inti=10;
i /=0;
}
catch (ArithmeticException e) {
System.out.println("异常是:"+e.getMessage());
}
finally {
System.out.println("finally 语句被执行");
}
}
}
编译并运行程序。
注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。
2、源文件是Demo3_2.java。要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。
public class Demo3_2 {
public static void main (String[] args){
int a, b;
int c[]={1,2,3};
try{ a=10;
b=100/a;
System.out.println ("当前a值:"+a);
c[2]=200;
System.out.println ("当前数组长:"+c.length);
}
catch(ArithmeticException e){
System.out.println ("除零错误:"+e); }
catch(ArrayIndexOutOfBoundsException e){
System.out.println ("数组下标越界:"+e); }
finally{
System.out.println ("我是finally"); }
System.out.println ("我能被正常执行到");
}
}
【思考】
①先运行上面程序,观察运行结果。
②按下条件分别修改数据,编译后运行,观察输出结果,分析在try…catch块里那些语句没有被执行,为什么? 块外那些语句可被执行到,为什么?
修改a=0,保持c[2]=200;
保持a=10,修改c[3]=200,
修改a=0,修改c[3]=200;
③再添加一个catch{Exception e}{ },位置在最前面,观察编译信息,说明什么?
3、编写Demo3_3.java程序,计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。源代码如下:
import java.io.*;
class Demo3_3{
publicstaticvoid main(String args[ ]) {
try{
BufferedReaderstrin=new BufferedReader
( new InputStreamReader(System .in));
System .out .print("请输入除数:");
String cl=strin .readLine();
int a=Integer .parseInt(cl);
System .out .print("请输入被除数:");
cl=strin .readLine();
int b=Integer .parseInt(cl);
int c=b/a;
System .out .println("商为:"+c);
}
catch(NumberFormatException e){
System .out .println("请输入整数!"); //e .printStackTrace();
}
//捕获除数为0的异常
catch(ArithmeticException e){
System .out .println("除数不可以0!");
//e .printstackTrace();
}
//捕获与I/O有关的异常
catch(IOException e){e.printStackTrace();}
//捕获数值转化时的异常,如不能将字符转化成数值
}
}
编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。
(二)自定义异常类
4、注意throw、throws的使用。源文件是Demo3_4.java。
package sy3;
classMyException extends Exception{
public String toString(){
return "除数等于零";
}
}
class DIV{
double div(double x,double y) throws MyException{
if(y==0) throw new MyException();
else return (x/y);
}
}
public class Demo3_4{
public static void main (String[] args) {
double z;
DIV d=new DIV();
try{
z=d.div(100,0);
System.out.println ("当前z值:"+z);
}catch(MyException e){
System.out.println (e.toString());
}
}
}
【思考】
①修改try...catch中语句z=div.DIV(100,0)入口参数,观察运行结果。
z=d.div(100,10);
z=d.div(100,0);
②将try...catch语句注释掉,观察编译信息。