第九章 Java异常处理练习

合集下载

java课件第9章91异常处理.ppt

java课件第9章91异常处理.ppt

第 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异常处理练习题

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 异常处理题目

狂翔软件自定义异常章节题目一.选择题: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异常处理课后作业
public static void main(String[] a) {
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异常处理试题及参考答案

异常处理练习题一、选择题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异常处理测试题
数和_______
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版)异常处理练习题

异常处理练习题一、选择题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.下面程序抛出了一个“异常”并捕捉它。

异常处理流程试题及答案

异常处理流程试题及答案

异常处理流程试题及答案一、选择题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());}}}```。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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之间。

相关文档
最新文档