第九章 Java异常处理练习
java课件第9章91异常处理.ppt
![java课件第9章91异常处理.ppt](https://img.taocdn.com/s3/m/a273d4e7eefdc8d377ee322d.png)
第 16 页
结束
当catch前面的try块中发生了一个异常,try-catch语句就会自动在try 块后面的各个catch块中,找出与该异常类相匹配的参数。当参数符合以 下三个条件之一时,就认为这个参数与产生的异常相匹配:
(1) 参数与产生的异常属于一个类; (2) 参数是产生的异常的父类; (3) 参数是一个接口时,产生的异常实现了这一接口。
带throws异常说明的方法说明形式如下: … 方法名(…) throws 异常类列表 { 方法体 }
第7页
结束
方法抛出的异常类是throws子句中指定的异常类或其子类。 比如在方法的说明中指明方法可能产生IOException, 但是实 际上可能抛出的异常或许是EOFException类的实例,这些异 常都是IOException的子类。
第6页
结束
9.1.2 抛出异常
Java提供了两种不同的异常抛出机制: throws抛出异常——间接抛出异常 throw 抛出异常——直接抛出异常
1. throws 抛出异常
throws异常说明总是和方法说明出现在一起。这样,方法说明 告诉编译器该方法可能会产生哪些异常,从而要求它的调用者必 须考虑处理这些异常。
static String getInput() throws IOException
// getInput()方法抛出异常,因为在它的方法体中调用的 //read方法抛出异常,并且该方法体本身使用throw抛出异常
{ char [] buffer = new char[20]; int counter = 0; boolean flag = true; while(flag) { buffer[counter] = (char)System.in.read();
java异常处理练习题
![java异常处理练习题](https://img.taocdn.com/s3/m/a262d9fdf021dd36a32d7375a417866fb84ac0d9.png)
java异常处理练习题Java异常处理练习题Java是一种面向对象的编程语言,广泛应用于软件开发领域。
在Java编程中,异常处理是一个非常重要的概念。
通过合理处理异常,我们可以提高程序的可靠性和健壮性。
本文将介绍一些Java异常处理的练习题,帮助读者更好地理解和掌握异常处理的知识。
1. 编写一个程序,从命令行获取一个整数,并将其平方输出。
如果输入的不是整数,则抛出一个自定义的异常"InvalidInputException",并提示用户重新输入。
```javaimport java.util.Scanner;class InvalidInputException extends Exception {public InvalidInputException(String message) {super(message);}}public class SquareNumber {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);try {System.out.print("请输入一个整数: ");int num = scanner.nextInt();System.out.println("平方结果: " + num * num);} catch (Exception e) {scanner.nextLine(); // 清除输入缓冲区System.out.println("输入无效,请重新输入。
");main(args); // 递归调用自身,重新执行程序}}}```2. 编写一个方法,接收一个整数数组和一个整数n作为参数,返回数组中第n 个元素的值。
如果n超出数组的索引范围,则抛出一个自定义的异常"ArrayIndexOutOfBoundException",并提示用户重新输入。
java 异常处理题目
![java 异常处理题目](https://img.taocdn.com/s3/m/39e8322de2bd960590c67701.png)
狂翔软件自定义异常章节题目一.选择题:1.关于异常的定义,下列描述中最正确的一个是()a)程序编译错误b)程序语法错误c)程序自定义的异常事件d)程序编译或运行中所发生的可预料或不可预料的异常事件,它会引起程序的中断,影响程序的正常运行2.抛出异常时,应该使用下列哪个子句a)thow b)catch c)finally d)throws3.自定义异常类时,可以通过对现列哪一项进行继承()a)Error 类b)Applet类c)Exception类及其子集d)AssertionError类4.当方法产生该方法无法确定该如何处理导演时,应该如何处理a)声明异常B)捕获异常C)抛出异常D)嵌套异常5.对于try和catch子句的排列方式,下列哪一项是正确的a)子类异常在前,父类异常其后b)父类异常在前,子类异常其后c)只能有子类异常d)父类异常和子类异常不能同时出现在同一个try程序段内6.下列java语言的常用异常类中,属于检测异常的是()a)ArithmeticExceptionb)FileNotFoundExceptionc)NullPointerExceptiond)IOException7.下面描述中,错误的一项是()a)一个程序抛出异常,任何其他在运行中的程序都可以捕获b)算术溢出需要进行异常处理c)在方法中监测到错误但不知道如何处理错误时,方法就声明一个异常d)任何没有被程序捕获的异常将最终被默认处理程序处理8.下列描述中,正确的一个是a)内存耗尽不需要进行异常处理b)除数为零需要进行异常处理c)异常处理通常比传统的控制结构流效率更高d)编译器要求必须设计实现优化的异常处理9.下列错误不属于Error的是a)动态链接失败b)虚拟机错误C)线程死锁D)被零除10.下列描述中,错误的一个是()a)异常抛出点后的代码在抛出异常后不再执行b)任何没有被程序捕获的异常将最终被缺省处理程序处理c)异常还可以产生于JA VA虚拟机内部的错误d)一个TRY代码段后只能跟有一个CATCH代码段11.下列描述中不属于java异常处理机制优点的一项是a)把错误处理代码从正常代码中分离出来b)按错误类型和差别分组c)对无法预测的错误的捕获和处理d)能够处理任何类型的错误12.下列方法中哪一个不能用于获取异常信息()a)toString() b) getMessage() c)drawline()d)printStackTrace()13.下列描述中,哪一项不属于finally语句应该招待的功能()a)释放资源b)关闭文件c)分配资源d)关闭数据库14.下列关于抛出异常的描述中,错误的一项是()a)任何从Throwable派生的类都可以用throw语句抛出b)Exception 和Error是Throwable的直接派生类c)异常抛出点后的代码在抛出异常后不再执行d)Exception代表系统严重错误,一般程序不处理这类错误15.一个catch语句段一定总和下列哪一项相联系a)Try语句段b)finally语句段c)throw d)throws二.选择题1.在java语言中,为将源代码编译成字节码时产生的错误为编译错误。
Java异常处理课后作业
![Java异常处理课后作业](https://img.taocdn.com/s3/m/c4b01302a31614791711cc7931b765ce05087acf.png)
int i=0, j=1, k; //k=i/j;
try {
k = i/j; // Causes division-by-zero exception //throw new Exception("Hello.Exception!"); }
动手动脑:多层的异常捕获-1
动手动脑:多层的异常捕获-2
动手动脑2:
当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
动手动脑3:
当存在try中有throw new Exception(...)finally不会执行。
动手动脑4
import java.util.Scanner; public class Score { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("输入学生成绩(整数):"); try { int num=input.nextInt(); if(num>100) { System.out.println("超出范围!"); } else if(num<=100&&num>=90) { System.out.println("优!"); } else if(num<90&&num>=80) { System.out.println("良!"); } else if(num<80&&num>=70) { System.out.println("中!"); } else if(num<70&&num>=60) { System.out.println("及格!"); } else { System.out.println("不及格!"); }
java异常处理试题及参考答案
![java异常处理试题及参考答案](https://img.taocdn.com/s3/m/6f4831acec3a87c24028c46a.png)
异常处理练习题一、选择题1.java中用来抛出异常的关键字是(C)A、tryB、catchC、throwD、finally2.关于异常,下列说法正确的是(A)A、异常是一种对象B、一旦程序运行,异常将被创建C、为了保证程序运行速度,要尽量避免异常控制D、以上说法都丌对3.(A)类是所有异常类的父类。
A、4.javaA、try{C、5.{{“除0}A、程序将输出第15行的异常信息B、程序第10行出错C、程序将输出“b=42”D、程序将输出第15和19行的异常信息6.下列程序的执行,说法正确的是(D)class ExMulti{static void procedure(){try{int c[]={1};c[42]=99;}catch(ArrayIndexOutOfBoundsException e){“数组超越界限异常:”+e);}}public static void main(String args[]){“除0}ABCD7.{{}{try{procedure();}catch(IllegalAccessExcepton e) ___________{“捕获:”+e);}}8.对于catch子句的排列,下列哪种是正确的(B )A、父类在先,子类在后B、子类在先,父类在后C、有继承关系的异常不能在同一个try程序段内D、先有子类,其他如何排列都无关9.在异常处理中,如释放资源、关闭文件、关闭数据库等由(C )来完成。
A、try子句B、catch子句C、finally子句D、throw子句10.当方法遇到异常又不知如何处理时,下列哪种说法是正确的(C )A、捕获异常B、抛出异常C、声明异常D、嵌套异常11.哪个关键字可以抛出异常?(C)JVM. int i=0;String greetings[]= {“Hello world!”,“No,I mean it!”,“HELLO WORLD!!”};while(i<4){____try________{}____catch__(ArrayIndexOutOfBoundsException e){i=-1;}finally{}i++;}}三、判断题1. ( F )程序中抛出异常时(throw …),只能抛出自己定义的异常对象。
java异常处理测试题
![java异常处理测试题](https://img.taocdn.com/s3/m/2c6c238a83d049649b665888.png)
4、捕获异常要求在程序的方法中预先声明,在调用方法时用try-catch-_____语句捕
获并处理。
5、java语言认为那些可预料和不可预料的出错称为_________
6、按异常处理不同可以分为运行异常、捕获异常、声明异常和______几种。
7、抛出异常的程序代码可以是______或者是JDK中的某个类,还可以是JVM.
throw_______IllegalAccessException(“demo”);
}
public static void main(String args[])
{
try
{
procedure();
}
________________________
{
System.out.println(“捕获:”+e);
10.当方法遇到异常又不知如何处理时,下列哪种说法是正确的( )
A、捕获异常B、抛出异常
C、声明异常D、嵌套异常
11.哪个关键字可以抛出异常?()
A、transient B、finally C、throw D、static
12.一个异常将终止( )
A、整个程序B、叧终止抛出异常的方法
C、产生异常的try块D、×上面的说法都丌对
}
}
8.对于catch子句的排列,下列哪种是正确的( )
A、父类在先,子类在后
B、子类在先,父类在后
C、有继承关系的异常不能在同一个try程序段内
D、先有子类,其他如何排列都无关
9.在异常处理中,如释放资源、关闭文件、关闭数据库等由( )来完成。
A、try子句B、catch子句
C、finally子句D、throw子句
(完整word版)异常处理练习题
![(完整word版)异常处理练习题](https://img.taocdn.com/s3/m/40bab3683c1ec5da50e270ea.png)
异常处理练习题一、选择题1.java中用来抛出异常的关键字是A、tryB、catchC、throwD、finally2.关于异常,下列说法正确的是A、异常是一种对象B、一旦程序运行,异常将被创建C、为了保证程序运行速度,要尽量避免异常控制D、以上说法都不对3.()类是所有异常类的父类。
A、ThrowableB、ErrorC、ExceptionD、AWTError4.java语言中,下列哪一子句是异常处理的出口A、try{…}子句B、catch{…}子句C、finally{…}子句D、以上说法都不对5.下列程序的执行,说法正确的是public class MultiCatch{public static void main(String args[]){try{int a=args.length;int b=42/a;int c[]={1};c[42]=99;System.out.println(“b=”+b);}catch(ArithmeticException e){System.out.println(“除0异常:”+e);}catch(ArrayIndexOutOfBoundsException e){System.out.println(“数组超越边界异常:”+e);}}}A、程序将输出第15行的异常信息B、程序第10行出错C、程序将输出“b=42”D、程序将输出第15和19行的异常信息6.下列程序的执行,说法正确的是class ExMulti{static void procedure(){try{int c[]={1};c[42]=99;}catch(ArrayIndexOutOfBoundsException e){System.out.println(“数组超越界限异常:”+e);}}public static void main(String args[]){try{procedure();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行的异常信息7.下面程序抛出了一个“异常”并捕捉它。
异常处理流程试题及答案
![异常处理流程试题及答案](https://img.taocdn.com/s3/m/b7650963a7c30c22590102020740be1e650ecc8c.png)
异常处理流程试题及答案一、选择题1. 在Java中,下列哪个关键字用于捕获异常?A. tryB. catchC. throwD. finally答案:B2. 下列哪个选项不是异常处理的组成部分?A. 异常抛出B. 异常捕获C. 异常声明D. 异常传播答案:C3. 在Python中,异常处理的关键字是?A. tryB. exceptC. finallyD. all of the above答案:D二、填空题1. 在Java中,当程序运行时发生异常,可以使用____关键字来捕获异常,并在____块中处理异常。
答案:catch;catch2. 在Python中,异常处理的语法结构为:try____except____。
答案:try;except三、简答题1. 请简述异常处理的流程。
答案:异常处理的流程通常包括以下步骤:- 检测异常:程序运行时,系统检测到异常。
- 抛出异常:系统将异常抛出,通知程序发生了错误。
- 捕获异常:程序通过try-catch块捕获异常。
- 处理异常:在catch块中编写代码来处理异常。
- 清理资源:无论是否捕获到异常,finally块中的代码都会被执行,用于资源清理。
2. 异常处理的好处是什么?答案:异常处理的好处包括:- 增强程序的健壮性:能够处理程序运行中出现的意外情况。
- 提高代码的可读性:将异常处理代码与正常业务逻辑分开,使代码更清晰。
- 避免程序崩溃:通过捕获和处理异常,防止程序因未处理的错误而崩溃。
- 资源管理:通过finally块确保资源(如文件、网络连接等)被正确释放。
四、编程题1. 编写一个Java程序,实现对数组索引越界的异常处理。
答案:```javapublic class ArrayIndexExceptionHandling {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5};try {System.out.println(numbers[5]);} catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组索引越界异常:" + e.getMessage());}}}```。
java 异常 练习题
![java 异常 练习题](https://img.taocdn.com/s3/m/93c83a08c950ad02de80d4d8d15abe23482f03fa.png)
java 异常练习题Java 异常练习题Java 异常处理是每个 Java 程序员都需要掌握的重要技能之一。
异常是在程序运行过程中出现的错误或异常情况,如除零错误、空指针异常等。
在编写 Java 程序时,我们需要预测并处理可能出现的异常,以保证程序的稳定性和可靠性。
下面,我将给出一些 Java 异常练习题,帮助大家巩固和提升自己的异常处理能力。
1. 编写一个方法,接收一个整数参数,如果参数为负数,则抛出一个自定义的异常 NegativeNumberException,异常信息为"输入的数字不能为负数"。
在主方法中调用该方法,并捕获并处理异常。
2. 编写一个方法,接收两个整数参数,计算它们的商,并返回结果。
在方法中捕获并处理可能出现的除零异常,如果除数为零,则抛出一个自定义的异常DivideByZeroException,异常信息为"除数不能为零"。
在主方法中调用该方法,并捕获并处理异常。
3. 编写一个方法,接收一个字符串参数,将其转换为整数并返回。
在方法中捕获并处理可能出现的数字格式异常,如果无法转换为整数,则抛出一个自定义的异常 NumberFormatException,异常信息为"无法将字符串转换为整数"。
在主方法中调用该方法,并捕获并处理异常。
4. 编写一个方法,接收一个文件路径参数,读取文件内容并打印。
在方法中捕获并处理可能出现的文件不存在异常,如果文件不存在,则抛出一个自定义的异常 FileNotFoundException,异常信息为"文件不存在"。
在主方法中调用该方法,并捕获并处理异常。
5. 编写一个方法,接收一个整数数组参数,计算数组中所有元素的平均值并返回。
在方法中捕获并处理可能出现的数组下标越界异常,如果数组下标越界,则抛出一个自定义的异常 ArrayIndexOutOfBoundsException,异常信息为"数组下标越界"。
异常处理流程考试试题
![异常处理流程考试试题](https://img.taocdn.com/s3/m/7760a741fe00bed5b9f3f90f76c66137ef064f47.png)
一、选择题1.在Java中,使用哪个关键字来捕获异常?A.catch(正确答案)B.tryC.finallyD.throw2.当一个方法可能抛出多种类型的异常时,这些异常类型在方法声明中应该如何指定?A.使用逗号分隔(正确答案)B.使用分号分隔C.使用“或”符号分隔D.使用“与”符号分隔3.在异常处理中,finally块的主要目的是什么?A.捕获异常B.处理异常C.无论是否发生异常都执行代码(正确答案)D.声明可能抛出的异常4.在Java中,如果一个方法可能抛出检查型异常,那么在方法声明时应该使用哪个关键字来声明这些异常?A.catchB.throws(正确答案)C.tryD.finally5.当一个异常被抛出时,Java虚拟机(JVM)会按照什么顺序查找适当的异常处理器?A.从当前方法开始,沿着调用栈向上查找(正确答案)B.从main方法开始,沿着调用栈向下查找C.从当前方法开始,沿着调用栈向下查找D.从main方法开始,沿着调用栈向上查找6.在Java中,自定义异常类通常是从哪个类继承而来的?ng.Objectng.Throwableng.Exception(正确答案)ng.RuntimeException7.在异常处理中,使用哪个关键字可以重新抛出当前捕获的异常?A.catchB.throwsC.throw(正确答案)D.finally8.在Java中,如果一个方法内部抛出了一个未被捕获的检查型异常,那么这个方法应该如何声明?A.无需特别声明B.使用throws关键字声明可能抛出的异常(正确答案)C.使用try-catch块捕获异常D.使用finally块处理异常。
异常处理作业
![异常处理作业](https://img.taocdn.com/s3/m/3d427f1fa22d7375a417866fb84ae45c3b35c2dc.png)
异常处理作业第九章异常处理一、选择题1、无论是否发生异常,都需要执行( C )A、try语句块B、catch语句块C、finally语句块D、return语句2、异常处理变量( C )。
A、应用public关键字B、可以应用protected关键字C、可以应用private关键字D、只能在异常处理方法内使用。
3、通常的异常类是(A )A、ExceptionB、exceptionC、CommonExceptionD、ExceptionShare4、异常产生的原因很多,常见的有(A )。
A、程序设计本身的错误B、程序运行环境改变C、软、硬件设置错误D、以上都是5、(C)是除0异常。
A、RuntimeExceptionB、ClassCastExceptionC、ArihmetticExceptionD、ArrayIndexOutOfBoundException6、下列描述中,对使用异常处理的原因描述错误的有( D )A、将错误处理程序与正常程序流分开,增加程序的可读性B、可以容易地指出异常在何处处理C、减轻程序员处理异常的任务D、增加语言的复杂机制7、读下面代码,哪个选项是正确的( C )import java.io.*;public class Test2{public static void main(String []args)throws IOException{i f(args[0]==”hello”)throw new IOException();}}A、没有错误,程序编译正确B、编译错误,不能够在main方法中抛出异常C、编译错误,IOException是一个系统异常,不能够由application程序产生D、没有输出结果8、当变异并且运行下面程序时会出现什么结果?( A )public class ThrowsDemo{static void throwMethod() {System.out.print("Inside throwMethod");throw new IOException("demo");}public static void main(String [] args){try{throwMethod();}catch(IOException e){System.out.println("Cauht"+e);}}}A、编译错误B、运行错误C、编译成功,但不会打印出任何结果D、没有输出结果9、执行下面程序的结果是什么?其中a=4,b=0 ( B )public static void divide(int a,int b){try{ int c = a / b; }catch(Exception e){System.out.println("Exception");}finally{System.out.println("Finally");}}A、打印Exception finallyB、打印FinallyC、打印ExceptionD、没有输出结果10、假定一个方法会产生非RuntimeException异常,如果希望把异常交给调用该方法的方法处理,正确的声明方式是什么?( A )A、t hrow Exc eptionB、throws ExceptionC、new ExceptionD、不需要指明什么11、阅读下面的代码段、try{tryThis();return;}catch(IOException x1){System.out.println(“exception 1”);Return;}catch(Exception x2){System.out.println(“exception 1”);Return;}finally{System.out.println(“finally”)}如果tryThis()抛出一个IOException,那么屏幕的输出是什么?( A )A、”exception 1”后面跟着”finally”B、” exception 2”后面跟着“finally”C、”exception 1”D、”exception 2””12、下列哪些内容不是异常的含义?( B )A、程序的语法错B、程序编译或运行中所发生的异常事件C、程序预先定义好的异常事件D、程序编译错误13、自定义的异常类可从下列哪个类继承?( D )A、Error类B、AWTErrorC、VirtualMachineErrorD、Exception及其子集14、当方法遇到异常又不知如何处理时,下列哪种做法是正确的?( A )A、捕获异常B、抛出异常C、声明异常D、嵌套异常15、如要抛出异常,应用下列哪种子句?( B )A、catchB、throwC、tryD、finally16、对于catch子句的排列,下列哪种是正确的?( B )A、父类在先,子类在后B、子类在先,父类在后C、有继承关系的异常不能在同一个try程序段内D、先有子类,其他如何排列都无关17、下列选项中属于异常的关键字是( C )A、publicB、InputStream C 、ExceptionD、abstract18、下列选项中属于Exception异常的是(D )A、ArithmeticExceptionB、nullPointerExceptionC、classcastExceptionD、以上都是19、以下是异常的处理,哪个选项是正确的(D)A、book()throws exceptionB、book(int a)exceptionC、book()throwsD、book()throw exception20、所有属于( B )子类的异常都是非检查型异常A、RuntimeExceptionB、ExceptionC、ErrorD、以上答案都不对21、Java编译程序对于( A )需要加强捕获或声明要求A、异常B、错误C、非检查型错误D、检查型异常22、如果试图捕获多个错误,可在( A )语句块的后面使用多个()语句块A、try catchB、catch tryC、finally tryD、以上答案都不对23、将需要处理异常作为( B )语句块的一个参数来进行声明A、tryB、catchC、finallyD、以上都不对24、try语句块可以(C )A、拥有惟一的一个catch语句块B、多个finally语句块C、一个或多个catch语句块D、以上答案都不对25、所有RuntimeException子类的异常都属于( C )A、致命错误 B 、逻辑错误 C 、检查型错误D、非检查型错误26、( D )是所有Exception和Error类的共同超类A、ThrowableB、CheckedExceptionC、CatchableD、RuntimeException27、Error和Exception是Throwable的两个直接子类,其中下列属于Error的直接子类的是( D )A、ThreadDeathB、LinkageErrorC、VirtualMachineErrorD、以上都是28、在try代码中声明的变量只能在该块的大括号( B )使用A、结束之前B、结束之后C、不清楚D、不用执行29、假定一个方法可能会产生非RuntimeException异常,如果希望把异常交给调用该方法的方法处理,正确的声明方式是(D)A、throws ExceptionB、throw ExceptionC、new ExceptionD、不需要指明什么30、try代码块中包含的是可能引起一个或多个异常代码,能够抛出异常的代码必须位于( A )代码块中。
java异常处理作业(20121113132845)
![java异常处理作业(20121113132845)](https://img.taocdn.com/s3/m/05535428af45b307e8719741.png)
Java异常处理作业孙月巧1、参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。
【提示:用错误数据测试,即可得到异常类名,运行时主方法参数输入abc 测试】package November;import java.util.Scanner;public class StringIndexOutOf{public static void main(String args[]){System.out.println("请输入一个字符串:");try{Scanner reader=new Scanner(System.in);String str = reader.nextLine();System.out.println("第四个字符为 " + str.charAt(3));int aa = Integer.parseInt(str);System.out.println("平方为 " + aa * aa);}catch(StringIndexOutOfBoundsException e){System.out.println("您输入的数值下标越界");}catch(NumberFormatException nfe){System.out.println("您输入的不是数字");}}}2、从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。
package November;public class Test2 {public static void main(String[] args) {System.out.println("请输入五个整数:");try {}catch (NumberFormatException n) {System.out.println("请输入整数");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("请输入至少5个整数");}catch (Exception e) {System.out.println(e.getMessage());}}}3、写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。
《Java程序设计》第9章 Java异常处理
![《Java程序设计》第9章 Java异常处理](https://img.taocdn.com/s3/m/69168974c1c708a1294a4411.png)
public static void main(String[] args) { FileInputStream in=new FileInputStream("myfile.txt"); int b; b = in.read(); while(b!= -1) {
finally代码块无论是否发生异常都有执行
9
try、catIcnhsp和ur fEidnuacaltlioyn语句说明
try 捕获异常的第一步是用try{…}语句块选定捕获异常的范围。
catch
Java在异ca常tch处语理句块中是对异常对象进行处理的代码,每个try语句
块可以伴随一个或多个catch语句,用于处理可能产生的不同 类型的异常对象。与其它对象一样,可以访问一个异常对象的 成员变量或调用它的方法。
12
Java异常处理
异Ins常pur处E理duc举ati例on
程序Test9_2运行结果:java Test9_2
lisa bily kessy index err this is the end Press any key to continue...
13
Java异常处理
IOInEsxpucreEpduticoatnio异n 常处理举例(未添加捕获)
告诉方法调用 者会发生异常
public int fn1(int a,int b) throws Exception
{
return division(a,b);
}
}
public class ExcepTest7 {
public static void main(String[] args) {
java异常练习
![java异常练习](https://img.taocdn.com/s3/m/4d2f83fb770bf78a65295409.png)
1、自己动手编写一个数组越界的异常。
public class Test1{public static void main(String args[]){int arr[ ]=new int[5];arr[10]=7;System.out.println(“end of main() method !!”);}}编译时不会产生错误,运行时出现错误信息:Exception in thread “main” ng.ArrayIndexOutOfBoundsException at Test1.main(******) 2、在练习1的基础上,修改代码,实现如果抛出异常,就输出index out of bound!public class Test2{public static void main(String args[]){try{int arr[ ]=new int[5];arr[10]=7;}catch(ArrayIndexOutOfBoundsException e){System.out.println(“index out of bound!”);}}}注意:不写catch而直接写finally也能实现。
3、在练习2的基础上,在catch语句里实现输出异常信息。
public class Test3{public static void main(String args[]){try{int arr[ ]=new int[5];arr[10]=7;}catch(ArrayIndexOutOfBoundsException e){System.out.println(“index out of bound!”);System.out.println(“Exception=”+e);System.out.println(“Exception=”+e.getMessage()”);System.out.println(“Exception=”+e.toString()”);}}}蓝色部分均可以实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章异常在Java应用程序中,异常处理是保证程序正常、可靠运行的一个重要方面,在前边已经遇到了简单的异常处理。
本章实验将主要针对程序中常用的异常的处理及异常的应用。
9.1 实验一:异常处理及应用实验目的(1). 了解异常的基本概念、异常的的产生和异常处理的过程。
(2). 基本掌握异常在应用程序中的应用。
实验要求编写应用程序,在程序中对常见的异常进行捕捉并作相应的处理。
实验内容实验示例9.1.1 在上一章8.2.1的实验示例测试中,若没有输入答案或输入非数字字符,则在处理过程中会出现数据格式异常,修改实验示例8.2.1创建的Exercises类,添加捕获并处理异常的程序代码。
实现该示例的步骤如下:⑴简要分析根据题意,首先需要确定会产生异常的程序段,然后使用try~catch结构进行捕捉和处理异常地处理。
由于主要处理数据格式异常,它由输入时的错误引起,所以,在处理异常时,就是返回到输入处,重新输入数据。
⑵根据上述简要分析,给出如下修改后的参考程序代码(Exercise.java):/*这是一个小学生综合训练题测试的应用程序*程序的名称:Exercise.java*程序中捕捉处理数据格式异常(NumberFormatException)*/import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class Exercises extends StudentScreen implements ActionListener,KeyListener{ int count = 0;int n1=0,n2=0;int total=0;int right=0;long timenum=0;Random rand=new Random();public Exercises(int total){this.total=total;num1.setText(""+rand.nextInt(100));num2.setText(""+rand.nextInt(100));info.setText("测试题目数:"+total+"道");answer.setEnabled(false); //在没开始答题之前,不得答题start.addActionListener(this);next.addActionListener(this);next.addKeyListener(this);answer.addKeyListener(this);}/***ActionListener接口方法实现***/public void actionPerformed(ActionEvent e){if(e.getSource()==start){start.setEnabled(false); //使开始按钮失效answer.setEnabled(true); //开始答题answer.requestFocus();count=right=0;n1=rand.nextInt(100);n2=rand.nextInt(100);num1.setText(""+n1);num2.setText(""+n2);timenum=System.currentTimeMillis();}else if(e.getSource()==next) compute(); //调用compute()成员方法}/***KeyListener接口方法实现***/public void keyPressed(KeyEvent e) //当按一个键时调用它{if(e.getKeyCode()!=e.VK_ENTER) return; //如果不是按了Enter键,则不处理 compute(); //调用compute()成员方法}public void keyReleased(KeyEvent ke) //当一个键被释放时调用它{/*当需要时,输入相关处理代码*/}public void keyTyped(KeyEvent ke) //当输入一个字符键时调用它{/*当需要时,输入相关处理代码*/}/**********成员方法设置运算符***********/public void setOperator() //设置运算符方法{if(n1>50&&n2>50) if(n1<n2)op.setText("+");//n1,n2>50,n1<n2进行加法运算 else op.setText("-") ; // n1>n2进行减法运算else if(n1>50) if(n2>10) op.setText("-"); //n1>50,n2>10进行减法运算 else op.setText("/"); // n1>50,n2<10进行除法运算else if(n2>50) if(n1>10) op.setText("+"); //n2>50,n1>10进行加法运算 else op.setText("*"); //n2>50,n1<=10进行乘法运算else if(n1>n2&&n2<10) op.setText("/"); // n1>n2,n2<10进行除法运算else if(n1<10||n2<10) op.setText("*"); //n1<=10或n2<=10 进行乘法运算else op.setText("+"); //其他进行加法运算}/**********成员方法:运算及答案处理***********/public void compute(){float x=0; //定义变量try //本题正确结果的计算与实际答题结果的比较{if(op.getText().equals("+")) x=n1+n2;else if(op.getText().equals("-")) x=n1-n2;else if(op.getText().equals("*")) x=n1*n2;else if(op.getText().equals("/")) x=n1/n2;if(x==Float.parseFloat(answer.getText())) right++;}catch(NumberFormatException e){ JOptionPane.showMessageDialog(null,"数据格式错误,请重新输入数据!!!");answer.requestFocus();return;}catch(Exception e1){ JOptionPane.showMessageDialog(null,e1.toString());return;}count++;if(count==total) //测试结束{JOptionPane.showMessageDialog(null,"总题目数"+total+";答对"+right+"道,花费时间"+(System.currentTimeMillis()-timenum)/1000+"秒!!!");System.exit(0);}n1=rand.nextInt(100)+1; //产生下一题n2=rand.nextInt(100)+1;num1.setText(""+n1);num2.setText(""+n2);setOperator(); //设置运算符号answer.setText("");answer.requestFocus();}}⑶编译Exercise.java程序,生成Exercise.class类文件,以供其他应用程序所用。
⑷程序及分析在compute()方法中使用了try~catch结构捕捉并处理可能出现的数据格式异常(NumberFormatException)和其他异常(Exception),当在结果栏中没有输入内容或输入非数字字符按“Enter”键或单击“下一题”按钮时,获取结果栏中的字符串并将它转换为数值时会产生数据格式异常(NumberFormatException),处理的办法是使用对话框提示错误信息,并定位到结果栏让训练者重新输入题目答案。
⑸编写测试程序,测试Exercise类的功能。
测试程序代码如下:import javax.swing.*;public class TestExercises extends JFrame{TestExercises(){add(new Exercises(30)); //选30道题进行训练setVisible(true);pack();图9-2 实验示例9.1.2屏幕界面 setDefaultCloseOperation(3);}public static void main(String [] args){new TestExercises();}}编译并运行测试程序,会出现如图9-1a 的对话框,单击“开始”按钮,进入如图9-1b 的答题界面,可以输入题目答案,然后按“Enter ”或单击“下一题”按钮进入下一题,若在答题时没输入答案或输入非数字字符,则会出现如图9-1c的消息对话框,此时,可单击“确定”按钮,返回到应答栏,重新输入应答数据。
最后在完成答题后,会出现如图9-1d 的结果对话框。
自由练习9.1 修改上一章自由练习8.1建立的输入学生信息程序,捕捉并处理当输入入学成绩时的数据错误。
实验示例9.1.2 编写程序,实现如图9-2的用户界面,完成一个简单的计算器应用程序。
要求:可以进行+、=、*、/四种运算;为了操作方便,输入运算数后按“Enter ”键连续进行下一数运算,并保留用鼠标单击“下一个”按钮连续进行下一数运算;并要求输入的运算数在0~1000之间。