异常作业
一、 填空题
- ______异常处理______机制是一种非常有用的辅助性程序设计方法。采用这种方法可以使得在程序设计时将程序的正常流程与错误处理分开,有利于代码的编写和维护。
- 在Java异常处理中可以使用多个catch子句,此时包含异常类的父类Exception的catch子句的位置应该是在__最后__________。
- 异常处理中finally块可确保无论是否发生异常,该块中代码总能被执行。finally块不执行的唯一情况是在异常处理代码中执行__System.exit()__________语句退出Java虚拟机。
- 异常是由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等,可分为两类:Checked异常和____运行时异常______________。
- 在Java中对于程序可能出现的检查时异常,要么用try…catch语句捕获并处理它,要么使用____throws_______语句抛出它,由上一级调用者来处理。
- Java异常处理中,如果一个方法中出现了多个Checked异常,可以在方法声明中使用关键字___throws___________声明抛出,各异常类型之间使用逗号分隔。
二、 选择题
1. |
以下关于异常的代码的执行结果是( C )。(选择一项) |
|
|
public class Test { public static void main(String args[]) { try { System.out.println("try"); return; } catch(Exception e){ System.out.println("catch"); }finally { System.out.println("finally"); } } } |
|
|
|
|
|
A. |
try catch finally |
|
B. |
catch finally |
|
C. |
try finally |
|
D. |
try |
2. |
在异常处理中,如释放资源、关闭文件等由( C )来完成。(选择一项) |
|
|
|
|
|
A |
try子句 |
|
B. |
catch子句 |
|
C. |
finally子句 |
|
D. |
throw子句 |
3. |
编译并运行如下Java程序,将输出( D )。(选择一项) |
|
|
public static void main(String[] args) { try { int num1 = 2; int num2 = 0; int result = num1 / num2; System.out.println(result); throw new NumberFormatException( ); } catch (ArrayIndexOutOfBoundsException e) { System.out.print("1"); } catch (NumberFormatException e) { System.out.print("2"); } catch (Exception e) { System.out.print("3"); } finally { System.out.print("4"); } System.out.print("5"); } |
|
|
|
|
|
A |
134 |
|
B. |
2345 |
|
C. |
1345 |
|
D. |
345 |
4. |
阅读如下Java代码,其中错误的行是( AC )。(选择二项) |
|
|
public class Student { private String stuId; public void setStuId(String stuId) throw Exception { // 1 if (stuId.length() != 4) { // 2 throws new Exception("学号必须为4位!"); // 3 } else { this.stuId = stuId; //4 } } } |
|
|
|
|
|
A |
1 |
|
B. |
2 |
|
C. |
3 |
|
D. |
全部正确 |
5. |
下面选项中有关Java异常处理模型的说法错误的是( AD )。(选择二项) |
|
|
|
|
|
A |
一个try块只能有一条catch语句 |
|
B. |
一个try块中可以不使用catch语句 |
|
C. |
catch块不能单独使用,必须始终与try块在一起 |
|
D. |
finally块可以单独使用,不是必须与try块在一起 |
6. |
下面选项中属于运行时异常的是( BC )。(选择二项) |
|
|
|
|
|
A |
Exception和SexException |
|
B. |
NullPointerException和InputMismatchException |
|
C. |
ArithmeticException和ArrayIndexOutOfBoundsException |
|
D. |
ClassNotFoundException和ClassCastException |
7. |
阅读如下Java代码,在控制台输入"-1",执行结果是(B)。(选择一项) |
|
|
public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入数字:"); try { int num = input.nextInt(); if (num < 1 || num > 4) { throw new Exception("必须在1-4之间!"); } } catch (InputMismatchException e) { System.out.println("InputMismatchException"); } catch (Exception e) { System.out.println(e.getMessage()); } } } |
|
|
|
|
|
A |
输出:InputMismatchException |
|
B. |
输出:必须在1-4之间! |
|
C. |
什么也没输出 |
|
D. |
编译错误 |
三、 简答题
- Error和Exception的区别
Exception:1.可以是可被控制(checked)或者不可控制(unchecked);
2.表示一个由程序员导致的错误;
3.应该在应用程序级被处理;
Error:1.总是不可控制的(unchecked);
2.经常用来表示系统错误或者底层资源错误;
3.如果可能的话,应该在系统级被捕捉;
- Checked异常和Runtime异常的区别。
1, Checked异常是编译异常
Runtime异常是运行异常
2,编译异常 : 一旦 用throw 抛出异常,如果当前方法 可处理异常,那么直接在该方法内用try-catch 去处理。
运行异常,不需要用throws 声明抛出 异常对象所属类,也可以不用throw 抛出异常对象或异常引用
- Java异常处理中,关键字try、catch、finally、throw、throws分别代表什么含义?
try 用来指定一块预防所有“异常”的程序;
catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
throw 语句用来明确地抛出一个“异常”(方法体);
throws 用来标明一个成员 方法可能抛出的各种“异常”(方法声明);
Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
- throws和throw的区别
1:位置
throws出现在方法头
而throw出现在方法体。
2:抛出区别
throws表示出现异常的一种可能性,并不一定会发生这些异常;声明的是一个异常类型
throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
3 处理异常方式
两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,
但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
一、 编码题
- 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
要求:使用自定义异常实现
1 public class ScoreScopeException extends RuntimeException{ 2 public ScoreScopeException() { 3 super(); 4 } 5 public ScoreScopeException(String message) { 6 super(message); 7 } 8 } 9 10 import java.util.Scanner; 11 public class Test { 12 public static void main(String[] args) { 13 Scanner scanner = new Scanner(System.in); 14 try { 15 System.out.print("请输入分数:"); 16 int score = scanner.nextInt(); 17 if (score < 0 || score > 100) { 18 throw new ScoreScopeException("分数必须在0-100之间"); 19 } 20 System.out.println("分数为:" + score); 21 } catch (ScoreScopeException e) { 22 System.out.println(e.getMessage()); 23 e.printStackTrace(); 24 } 25 } 26 }
2.写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
1 public class sanjaio { 2 private static void isTriangle(int a,int b,int c) throws IllegalAccessException{ 3 if(a<0||b<0||c<0){ 4 throw new IllegalAccessException("三角形边长不能为负数"); 5 } 6 if(a+b>c&&a+c>b&&b+c>a){ 7 System.out.println("三角形三边分别是:"+"a="+a+" b="+b+" c="+c); 8 }else{ 9 throw new IllegalAccessException(a+","+b+","+c+","+"不能构成三角形"); 10 } 11 } 12 public static void main(String[] args) throws IllegalAccessException{ 13 Scanner sc= new Scanner(System.in); 14 System.out.println("请分别输入三角形三条边:"); 15 int a= sc.nextInt(); 16 int b=sc.nextInt(); 17 int c=sc.nextInt(); 18 isTriangle(a,b,c); 19 } 20 }
五、 可选题
- 编写一个计算N个整数平均值的程序。程序应该提示用户输入N的值,如何必须输入所有N个数。如果用户输入的值是一个负数,则应该抛出一个异常并捕获,提示“N必须是正数或者0”。并提示用户再次输入该数
1 public static void main(String[] args) { 2 Scanner sc = new Scanner(System.in); 3 System.out.println("您要输入几个数呢:"); 4 int n = sc.nextInt(); 5 int sum = 0; 6 for (int i = 0; i < n; i++) { 7 System.out.println("请输入" + (i + 1) + "个数:"); 8 9 try { 10 double num1 = sc.nextDouble(); 11 if (num1 < 0) { 12 throw new Exception("输入的数必须是正数或者是0"); 13 } 14 sum += num1; 15 } catch (Exception e) { 16 // TODO Auto-generated catch block 17 e.printStackTrace(); 18 System.out.println(e.getMessage()); 19 } 20 } 21 System.out.println("一共输入"+n+"个数"+", 和为"+sum+", 平均值为"+sum/n); 22 } 23 }