实验指导书实验名称:包、接口与异常处理学时安排:2实验类别:综合设计型实验实验要求:1人1组 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1、掌握java字符串处理方法。2、掌握java面向对象的概念。3、掌握java自定义异常和处理。4、通过实验,对Java程序的开发有一个深入了解。二、实验内容1.阅读并分析程序TestException.java。(见附件PPT文件)2.设计一个程序,其功能是从命令行输入整数字符串,再将该整数字符串转换为整数,输入的数据可能具有以下格式:12345、12345、123xyz4563.编写一个四则运算程序,要求用户输入一个x值和一个y值,以及一个四则运算符。如果用户输入正确,则给出运算结果,如果输入错误,则给出出错警告。(利用异常处理编程,尽量使用java现成的异常类,如没有可自定义异常类)三、程序代码1.publicclassTestException{publicTestException(){}booleantestEx()throwsException{booleanret=true;try{ret=testEx1();}catch(Exceptione){System.out.println(testEx,catchexception);ret=false;throwe;}finally{System.out.println(testEx,finally;returnvalue=+ret);returnret;}}booleantestEx1()throwsException{booleanret=true;try{ret=testEx2();if(!ret){returnfalse;}System.out.println(testEx1,attheendoftry);returnret;}catch(Exceptione){System.out.println(testEx1,catchexception);ret=false;throwe;}finally{System.out.println(testEx1,finally;returnvalue=+ret);returnret;}}booleantestEx2()throwsException{booleanret=true;try{intb=12;intc;for(inti=2;i=-2;i--){c=b/i;System.out.println(i=+i);}returntrue;}catch(Exceptione){System.out.println(testEx2,catchexception);ret=false;throwe;}finally{System.out.println(testEx2,finally;returnvalue=+ret);returnret;}}publicstaticvoidmain(String[]args){TestExceptiontestException1=newTestException();try{testException1.testEx();}catch(Exceptione){e.printStackTrace();}}}2.importjava.util.*;publicclasstest{publicstaticvoidmain(Stringargs[]){inti,number=0;Stringstr;try{for(i=0;iargs.length;i++){str=args[i];number=Integer.parseInt(str);System.out.printf(第%d个字符转换为整数后:%d\n,i+1,number);}}catch(NumberFormatExceptione){System.out.println(输入字符串不正确!);}}}3.importjava.io.*;importjava.util.*;publicclassExceptionExam{voidaddition(doublex,doubley)//加法运算{System.out.println(x+y=+(x+y));}voidsubtraction(doublex,doubley)//减法运算{System.out.println(x-y=+(x-y));}voiddivision(doublex,doubley)//除法运算{doublez;try{if(y==0){thrownewArithmeticException();}z=x/y;System.out.println(x/y=+z);}catch(ArithmeticExceptione){System.out.println(被零除);}}voidmultiplication(doublex,doubley)//乘法运算{System.out.println(x*y=+(x*y));}publicstaticvoidmain(Stringargs[]){ExceptionExamexception=newExceptionExam();Stringstandard;doublex,y;do{Scannerreader=newScanner(System.in);try{System.out.println(请输入x:);x=reader.nextDouble();System.out.println(请输入y:);y=reader.nextDouble();System.out.println(请输入四则运算符:);charz=reader.next().charAt(0);switch(z){case'+':exception.addition(x,y);break;case'-':exception.subtraction(x,y);break;case'*':exception.multiplication(x,y);break;case'/':exception.division(x,y);break;default:try{thrownewIOException();}catch(IOExceptione){System.out.println(运算符输入错误);}}}catch(Exceptione){System.out.println(输入的不是数值!);}System.out.println(继续吗?(输入no退出,输入其他则继续。));reader=newScanner(System.in);standard=reader.nextLine();}while(!no.equals(standard));}}四、运行结果与测试分析1.程序分析:首先,在TestException这个类中除了main方法和一个无参数构造函数之外,还有另外3个方法:testEx()、testEx1()和testEx2()。它们的返回值都是布尔型,且都可能抛出异常。程序从main方法开始执行,首先创建了一个TestException类的对象testException1,然后进入try语句块,用对象testException1调用函数testEx,程序开始执行testEx函数的函数体。在函数testEx的try块中调用了函数testEx1,于是又转向执行testEx1的函数体,但在它的try块中又调用了testEx2(),于是程序转向执行testEx2的函数体。在testEx2的try块中的for循环中,前两次循环正常执行,分别输出i=2和i=1,但第三次循环时出错(出现了除数i为0的情况),抛出异常并被本函数中的catch语句捕获,输出“testEx2,catchexception”,把ret的值赋成false,并抛出原异常,但在离开本函数之前还要执行finally中的语句,于是输出“testEx2,finally;returnvalue=false”并返回ret的值false,由于finally语句中使用了return语句,所以导致异常丢失,接着程序返回testEx2的调用者testEx1中,由于testEx2的返回值为false,故testEx1中的ret为false,if语句条件为真,返回false,但在离开testEx1之前,要执行finally中的语句,于是输出“testEx1,finally;returnvalue=false”并返回ret的值false(由于finally语句中使用了return语句,所以try区域中return语句的返回值被覆盖)。流程转到testEx中,由于testEx1返回false,故testEx中的ret为false,接着执行finally中的语句,输出“testEx,finally;returnvalue=false”并返回ret的值false。接着流程返回到main函数中,程序正常结束。运行结果截图如下:2.运行结果截图如下:3.