Java300集-第6章异常机制练习题及答案

一、选择题

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

C.

2.在异常处理中,如释放资源、关闭文件等由( )来完成。(选择一项)

Atry子句

B.catch子句

C.finally子句

D.throw子句

C.

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.全部正确

AC.

4.下面选项中属于运行时异常的是( )。(选择二项)

A.Exception和SexException

B.NullPointerException和InputMismatchException

C.ArithmeticException和ArrayIndexOutOfBoundsException

D.ClassNotFoundException和ClassCastException

BC.

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.编译错误

B.

二、简答题

1. Error和Exception的区别。

Error:大多数Error与代码编写者执行的操作无关,而是JVM运行代码时出现的问题,表明系统JVM已经处于不可恢复的崩溃状态中。我们不需要管它.
Exception:异常Exception是程序员能够处理的,一般通过try-catch-finally或
throws机制进行处理。

2. Checked异常和Runtime异常的区别。

CheckedException是指已检查异常,在代码编译阶段就会被发现,所以必须进行处理,否则无法通过编译,处理这类异常的方式有两种:try-catch-finally机制或throws机制。如:SQLException、IOException等异常。
RuntimeException是指运行异常,需要在代码运行时才能发现,这类异常是由编程错误导致,对于这类异常,不用采用处理机制来处理,只需要增加适当的逻辑处理代码即可。如:Arithmetic、NullPointer、ClassCast、ArrayOutOfBounds、NumberFormat。

3. Java异常处理中,关键字try、catch、finally、throw、throws分别代表什么含义?

try:放可能产生异常的代码块;
catch:捕捉异常,可以有多个catch;
finally:不管是否抛出异常,都会执行的代码块。通常关闭文件流,数据库连接等。
throw:指抛出的一个具体的异常类型;
throws:声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。

4. throws和throw的区别。

throws申明异常,在方法名后。
throw抛出异常,在方法体内。

三、编码题

1. 编写程序接收用户输入分数信息,如果分数在0100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0100之间。

要求:使用自定义异常实现。

import java.util.Scanner;
public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入分数:");
        double score = scanner.nextDouble();
        try {
            if(score<0||score>100) {
                throw new InputException("分数必须在0~100之间!!!");
            }
            System.out.println("分数:"+score);
        } catch (InputException e) {
            e.printStackTrace();
        } finally {
            scanner.close();
        }
    }
}
//自定义异常类
class InputException extends Exception {
    public InputException() {}
    public InputException(String massage) {
        super(massage);
    }
}

2. 写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。

import java.util.Scanner;
public class Test02 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入三角形的边长:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        isTriangle(a,b,c);
    }
    static void isTriangle(int a,int b,int c) {
        try {
            if(a+b<=c || a+c<=b || b+c<=a) {
                throw new IllegalArgumentException("a,b,c不能构成三角形!");
            }
            System.out.println("三个边长分别为:"+a+"\t"+b+"\t"+c);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}
//自定义异常类
class IllegalArgumentException extends Exception {
    public IllegalArgumentException() {}
    public IllegalArgumentException(String massage) {
        super(massage);
    }
}

3. 编写一个计算N个学生分数平均分的程序。程序应该提示用户输入N的值,如何必须输入所有N个学生分数。如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。

import java.util.Scanner;

public class Test03 {
    public static void main(String[] args) {
        System.out.print("请输入学生的个数:");
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int sum = 0; //总分数
        for (int i = 1; i <= N; i++) {
            try {
                System.out.print("请输入第" + i + "个学生的成绩:");
                int score = scanner.nextInt();
                if (score < 0) {
                    throw new IllegalArgumentException();
                } else {
                    sum = sum + score;
                }
            } catch (Exception e) {
                System.out.println("分数必须是正数或者0!!请重新输入第" + i + "个学生的成绩");
                i--;
            }
        }

        double avg = sum / N;
        System.out.println("学生分数平均数为:" + avg);
    }
}

class IllegalScoreException extends Exception {//自定义非法参数异常类

    //默认构造器
    public IllegalScoreException() {

    }

    //带有详细信息的构造器,信息存储在message中
    public IllegalScoreException(String message) {
        super(message);
    }
}

你可能感兴趣的:(Java,java)