尚学堂-第六章答案

一、选择题
1.以下关于异常的代码的执行结果是( )。(选择一项)

public class Test { public static void main(String args[]) { try { System.out.print("try"); return; } catch(Exception e){ System.out.print("catch"); }finally { System.out.print("finally"); } } }

A.try catch finally
B.catch finally
C.try finally
D.try
2.在异常处理中,如释放资源、关闭文件等由( )来完成。(选择一项)
Atry子句
B.catch子句
C.finally子句
D.throw子句
3.阅读如下Java代码,其中错误的行是( )。(选择二项)
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.全部正确
4.下面选项中属于运行时异常的是( )。(选择二项)
A.Exception和SexException
B.NullPointerException和InputMismatchException
C.ArithmeticException和ArrayIndexOutOfBoundsException
D.ClassNotFoundException和ClassCastException
5.阅读如下Java代码,在控制台输入"-1",执行结果是()。(选择一项)
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.编译错误
二、简答题
  1. Error和Exception的区别。
    Error是程序无法处理的错误,表明系统JVM已经处于不可恢复的崩溃状态中。
    Exception是程序本身能够处理的异常。
  2. Checked异常和Runtime异常的区别。
    Runtime异常包含了一大类被 0 除、数组下标越界、空指针等异常,产生频繁,如果用throw或try catch对可读性和运行效率影响较大,从而通过系统检测和处理的异常。
    Checked异常为除了Runtime异常后剩下的异常,需要在编译时就进行处理,否则无法通过编译。
  3. Java异常处理中,关键字try、catch、finally、throw、throws分别代表什么含义?
    try指定了异常捕获并处理的范围。
    catch代表异常捕获,捕获异常对象并作相应处理。
    throw用于手动地抛出异常对象,throw后面需要一个异常对象。
    throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。
  4. throws和throw的区别。
    throw用于手动地抛出异常对象,throw后面需要一个异常对象。
    throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。
三、编码题
  1. 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
要求:使用自定义异常实现。
import java.util.Scanner; class IlegalException extends Exception{ public IlegalException() { } public IlegalException(String msg) { super(msg); } }class Score{ private float score; public void setScore() throws IlegalException{ float getScore; System.out.println("请输入分数:"); Scanner scanner = new Scanner(System.in); getScore = scanner.nextFloat(); if(getScore<0||getScore>100) { throw new IlegalException("分数不在0~100之间"); } this.score = getScore; } }public class Sixth1 { public static void main(String[] args) throws IlegalException { Score score =new Score(); score.setScore(); } }

  1. 写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
import java.util.Scanner; class IllegalArgumentException extends Exception{ public IllegalArgumentException() { } public IllegalArgumentException(String msg) { super(msg); } }public class Sixth2 { static void isTriangle(int a,int b,int c) throws IllegalArgumentException { if(a+b<=c || a+c<=b || b+c<=a) { throw new IllegalArgumentException("a,b,c不能构成三角形"); } System.out.println("a="+a+",b="+b+",c="+c); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a,b,c; System.out.println("请输入三角形的边长a:"); a=scanner.nextInt(); System.out.println("请输入三角形的边长b:"); b=scanner.nextInt(); System.out.println("请输入三角形的边长c:"); c=scanner.nextInt(); try { isTriangle(a, b, c); } catch (IllegalArgumentException e) { e.printStackTrace(); System.exit(-1); } } }

  1. 编写一个计算N个学生分数平均分的程序。程序应该提示用户输入N的值,如何必须输入所有N个学生分数。如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。
import java.util.Scanner; class IlegalScoreException extends Exception{ public IlegalScoreException() { } public IlegalScoreException(String msg) { super(msg); } }public class Sixth3 { public static void check(int k)throws IlegalScoreException{ if(k<0) { throw new IlegalScoreException("分数必须是正数或者0"); } } public static void main(String[] args) { int N; Scanner scanner = new Scanner(System.in); System.out.println("请输入学生数:"); N = scanner.nextInt(); for(int i =1; i<=N; i++) { int k; System.out.println("第"+i+"位学生成绩是:"); k=scanner.nextInt(); try { check(k); } catch (Exception e) { e.printStackTrace(); System.out.println("格式不正确,请重新输入"); i -= 1; }} } }

尚学堂-第六章答案
文章图片

    推荐阅读