1、JAVA程序设计练习题,第5章,一、选择题,1下面关于Java中异常处理try块的说法正确的是( )? (选两项)A. try块后通常应有一个catch 块,用来处理 try块中抛出的异常。 B. catch 块后必须有finally块。C.可能抛出异常的方法调用应放在try块中。 D.对抛出的异常的处理必须放在try块中,【答案】:A C,2以下关于java异常说法不正确的是( )。A. Throwable 类是 Java 语言中Error类和Exception类的父类。B.当异常对象是Exception类(或其子类)的实例时,能通过 Java 虚拟机或者 throw 语句抛出该异常对象,并
2、能通过trycatchfinally处理。C.如果只用一个catch块捕捉多个异常对象,则catch 子句中的参数类型应是所有异常对象的父类。D.以上说法都不对。,【答案】:D,3异常包含下列哪些内容?()A程序执行过程中遇到的事先没有预料到的情况B程序中的语法错误C程序的编译错误D以上都是,【答案】:A,4对于已经被定义过可能抛出异常的语句,在编程时:()A.必须使用trycatch语句处理异常,或用throws将其抛出B如果程序错误,必须使用 trycatch语句处理异常C可以置之不理D只能使用trycatch语句处理,【答案】:A,5java中用来抛出异常的关键字是()A.try B.c
3、atch C.throw D.finally6.关于异常,下列说法正确的是( )A.异常是一种对象B.一旦程序运行,异常将被创建C.为了保证程序运行速度,要尽量避免异常控制D.以上说法都不对,【答案】:C,【答案】:A,7.( )类是所有异常类的父类。A.ThrowableB.ErrorC.ExceptionD.AWTError8.java语言中,下列哪一子句是异常处理的出口( )A.try子句B.catch子句C.finally子句,【答案】:A,【答案】:C,9.下列程序的执行,说法错误的是1.class MultiCatch2.3. public static void main(Str
4、ing args)4. 5. try6. 7. int a=args.length;8. int b=42/a;9. int c=1;10. c42=99;11. System.out.println(“b=”+b);12. 13. catch(ArithmeticException e)14. 15. System.out.println(“除0异常:”+e);16. 17. catch(ArrayIndexOutOfBoundsException e)18.19. System.out.println(“数组超越边界异常:”+e);20. 21. 22. ,String args是main
5、函数的形式参数,可以用来获取命令行用户输入进去的参数(字符串),A.程序将输出第15行的异常信息B.程序第10行出错C.程序将输出“b=42”D.程序将输出第19行的异常信息,【答案】:A,10.下列程序的执行,说法正确的是class ExMulti static void procedure() try int c=1; c42=99; catch(ArrayIndexOutOfBoundsException e) System.out.println(“数组超越界限异常:”+e); ,public static void main(String args) try procedure();
6、 int a=args.length; int b=42/a; System.out.println(“b=”+b); catch(ArithmeticException e) System.out.println(“除0异常:”+e); ,A.程序只输出第12行的异常信息B.程序只输出第26行的异常信息C.程序将不输出异常信息D.程序将输出第12行和第26行的异常信息,【答案】:D,11. ( )下列常见的系统定义的异常中,哪个是输入、输出异常? AClassNotFoundException BIOException CFileNotFoundException DUnknownHostE
7、xception12. 在java中,在尝试对null 对象操作时,会产生( )类型的异常。A.ArithmeticException B.NullPointerExceptionC.IOException D.EOFException,【答案】:B,【答案】:B,13. 在java 的异常处理模型中,无论是否发生异常,( )块中的代码都会被执行。A.tryB.catchC.finallyD.throw14. 下面关于try catch和finally的陈述哪项是错误的()A.try块后必须跟着catch块B.try块后可以跟着catch块或finally块,或二者皆可C.catch块必须与t
8、ry块一起使用D.finally块必须与try块一起使用,【答案】:C,【答案】:A,二、填空题,1.catch子句都带一个参数,该参数是某个异常的类及其变量名,catch用该参数去与_对象的类进行匹配。2.java虚拟机能自动处理_异常。3.变量属性是描述变量的作用域,按作用域分类,变量有局部变量、类变量、方法参数和_4.同一段程序可能产生不止一种异常。可以放置多个_子句,其中每一种异常类型都将被检查,第一个与之匹配的就会被执行。5.捕获异常要求在程序的方法中预先声明,在调用方法时用try-catch-_ _语句捕获并处理。,抛出异常,运行,异常处理参数,catch,finally,6.ja
9、va语言认为那些可预料和不可预料的出错称为_7.按异常处理不同可以分为运行异常、捕获异常、声明异常和_几种。8.抛出异常的程序代码可以是_或者是JDK中的某个类,还可以是JVM.9.抛出异常、生成异常对象都可以通过_语句实现。10.捕获异常的统一出口通过_语句实现。11.java语言的类库中提供了一个_ _类,所有的异常都必须是它的实例或它子类的实例。12.Throwable类有两个子类:_ _类和Exception类。13.对程序语言而言,一般有编译错误和_错误两类。,异常,抛出异常,java应用程序,throw,finally,Throwable,Error,运行,14.下面程序定义了一个
10、字符串数组,并打印输出,捕获数组超越界限异常。请在横线处填入适当的内容完成程序。public class HelloWorld public static void main(String args ) int i=0; String greetings= “Hello world!”, “No,I mean it!”, “HELLO WORLD!” ;while(i4) _ ,try,System.out.println(greetingi);_ ArrayIndexOutOfBoundsException e)System.out.println(“Re-setting Index Val
11、ue”);i=-1; finally System.out.println(“This is always printed”);i+;,catch,三、读程序写结果,1public class Unchecked public static void main(String args) try method(); catch (Exception e) System.out.println(A); finally System.out.println(B); ,static void method() try wrench(); System.out.println(C); catch (Ar
12、ithmeticException e) System.out.println(D); finally System.out.println(E); System.out.println(F); static void wrench() throw new NullPointerException(); ,EAB,2public void test() try oneMethod(); System.out.println(condition 1); catch (ArrayIndexOutOfBoundsException e) System.out.println(condition 2)
13、; catch(Exception e) System.out.println(condition 3); finally System.out.println(finally); 在oneMethod()方法运行正常的情况下将显示什么?,condition 1 finally,3. class MyException extends Exceptionpublic String toString( )return negative; public class ExceptionDemopublic static void mySqrt(int a) throws MyExceptionif(
14、 a0 ) throw new MyException();System.out.println(Math.sqrt(a); public static void main( String args )try mySqrt(25 ); mySqrt(-5 ); catch( MyException e ) System.out.println(Caught +e); ,5.0Caught negative,4. public class ExceptionDemo public static void main (String args) int array1=6,0,8; for(int i
15、=0; i=array1.length;i+) try int d=100/array1i; System.out.println(正常:d=+d); catch(ArithmeticException e) System.out.println(算术异常!); catch(ArrayIndexOutOfBoundsException e) System.out.println(“下标越界异常!”); finally System.out.println(异常处理结束!);,正常:d=16异常处理结束!算术异常!异常处理结束!正常:d=12异常处理结束!下标越界异常!异常处理结束!,5. cl
16、ass Excestatic void genException( ) int array =new int 5; try array5=5; catch (ArrayIndexOutOfBoundsException e) System.out.println(抛出异常); throw e; System.out.println(正常退出!); public class Example public static void main(String args ) try Exce. genException( ); catch(ArrayIndexOutOfBoundsException e)
17、 System.out.println(处理异常); ,抛出异常 处理异常,6. class noIntExce extends Exception int a,b; noIntExce(int i, int j) a=i; b=j; public String toString( ) retrun a+/+b+不是整型结果; public class Example pulic static main (String args ) int i=0, j=3; while(i+6) try if(i%j! =0) throw new noIntExce(i, j); System.out.pr
18、intln(正常退出); catch (noIntExce e) System.out.println(e); ,1/3不是整型结果 2/3不是整型结果正常退出4/3不是整型结果 5/3不是整型结果正常退出,四、程序填空题,1. class _ extends Exception String mymsg=我自己定义的异常!; double mynum = 2.0; MyException () super(首字母不能为A! ); MyException (String msg)_ /调用父类构造方法,参数为 msg public void displayme() System.out.pri
19、ntln(mymsg); public double mymethod() return Math.sqrt(mynum); class ExceptionTest public static void main(String args) try if ( argsO.charAt(O)= A) MyException e = new MyException();,MyException,super(msg),System.out.println(kkkk: + e.mymethod();e.displayme();Systemoutprintln(*in try*); _; /抛出异常e e
20、lse if(argsO.charAt(O)= B) throw new MyException (第一个字符不应是B! ); else System.out.println(args0); catch ( _ ) System.out.println(aaa.getMessage(); aaa.displayme(); System.out.println( + aaa.mymethod(); catch( _ ) System.out.println(命令行参数个数错!); ,throw e,MyException aaa,ArrayIndexOutOfBoundsException,2.
21、 下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。class TrowsDemo static void procedure() throws IllegalAccessExcepton System.out.println(“inside procedure”); throw_IllegalAccessException(“demo”); public static void main(String args) try procedure(); _ System.out.println(“捕获:”+e); ,new,catch(IllegalAccessException e),