实验五 异常处理
实验五异常处理
一、实验目的
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(\异常是:\ } finally { System.out.println(\语句被执行\ } } } ? 编译并运行程序。
注意:如果在 catch 语句中声明的异常类是 Exception,catch 语句也能正确地捕获,这是因为 Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为 Exception,即说明异常的类型为 Exception。 2、源文件是Demo3_2.java。要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。
public class Demo3_2 { public static void main (String[] args){
- 24 -
int a, b; int c[]={1,2,3}; try{ a=10;
b=100/a;
System.out.println (\当前a值:\c[2]=200; System.out.println (\当前数组长:\ }
catch(ArithmeticException e){ System.out.println (\除零错误:\} catch(ArrayIndexOutOfBoundsException e){
System.out.println (\数组下标越界:\ 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=newBufferedReader ( newInputStreamReader(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(\请输入整数!\);
- 25 -
//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值:\ }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语句注释掉,观察编译信息。
- 26 -
③ 上面条件保持,在main函数后面加上throws MyException再重新编译,能否通过?然后运行观察结果,
得到什么结论?
2.编写程序Demo3_5.java,包含自定义异常,当输入数值为13和4时抛出该异常。源代码如下: class Ex3_5 extends Exception{ Ex3_5 (String msg){ super(msg); } }
class Demo3_5{ privateintx;
voidsetX(int x) { this.x=x; }
void f1() throws Ex3_5{ if(x==13)
thrownew Ex3_5(\); elseif(x==4)
thrownew Ex3_5(\); else
System .out.println(100/x); }
publicstaticvoid main(String args[ ]) { Demo3_5 a=new Demo3_5(); try {
a.setX(5); //a.setX(13); //a.setX(4); //a.setX(0); a.f1(); }
catch(Ex3_5 e) {
System.out.println(\+e.getMessage()); } } }
【思考】编译并运行,分别取消注释上面程序中被注释的语句。当释放a.setX(13)语句后,查看运行结果,当释放a.setX(4)语句后,查看运行结果,当释放a.setX(0)语句后,查看运行结果。
四、实验练习题
1、编写Java程序,创建数组后,对数组访问时发生的数组越界.实验使用try-catch语句处理该异常。运行结果如图所示。
- 27 -
import java.io.*; publicclass Demo3_6 { }
publicstaticvoid main(String[] arg3) { }
try{
BufferedReaderstrin=newBufferedReader ( newInputStreamReader(System .in)); System.out.println(\请输入创建数组的个数:\\n\); String cl=strin.readLine();
int a=Integer .parseInt(cl);
System.out.println(\数组创建完毕!!您要查找那个元素?\\n\); String c2=strin.readLine(); }
catch(ArrayIndexOutOfBoundsException e){
System.out.println (\这里出现的错误类型是:数组下标越界!\+e); }
int b=Integer .parseInt(c2);
finally{
System.out.println (\主程序正常结束!\);
}
- 28 -
29
…… 此处隐藏:2007字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




