JAVA300第六章异常作业

这篇博客详细介绍了Java异常处理的基础知识,包括选择题部分,涉及try-catch-finally、异常类型、运行时异常的区别等内容;简答题部分,解释了Error与Exception、Checked异常与Runtime异常的差异,以及try、catch、finally、throw、throws的关键字含义;同时给出了编程题,要求编写处理异常的代码示例,如分数输入检查、三角形判断等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、选择题

1.以下关于异常的代码的执行结果是( C )。

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

解析
即使try语句块中出现了return,还是会执行finally语句块的

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

A. try子句

B.catch子句

C.finally子句

D.throw子句

3.阅读如下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.全部正确

解析
1处为throws
3处为throw

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

A.Exception和SexException

B.NullPointerException和InputMismatchException

C.ArithmeticException和ArrayIndexOutOfBoundsException

D.ClassNotFoundException和ClassCastException

解析
A中:
Exception类是所有异常类的父类,包括RuntimeException 运行时异常和CheckedException 已检查异常
SexException,不知道是个啥,可能是自己定义的异常类(要看你具体继承的是什么异常类)

B中:
NullPointerException 当程序运行时,对象未初始化或为空时,NullPointerException就出现(运行时异常)
InputMismatchException Scanner读入的字符与我们的变量类型不同导致的(运行时异常)
java.lang.Object
----java.lang.Throwable
--------java.lang.Exception
------------java.lang.RuntimeException
----------------java.util.NoSuchElementException
--------------------java.util.InputMismatchException

C中:
ArithmeticException 出现异常的运算条件时,抛出此异常。(运行时异常)
IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出 (运行时异常)

D中:
ClassCastException 试图将对象强制转换为不是实例的子类时,抛出该异常(运行时异常)
ClassNotFoundException 无法找到指定的类异常。(不是运行时异常)
java.lang.Object
----java.lang.Throwable
--------java.lang.Exception
------------java.lang.ReflectiveOperationException
----------------java.lang.ClassNotFoundException

5.阅读如下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.编译错误

解析
只触发了自定义异常,没有触发InputMismatchException,此异常是Scanner读入的字符与我们的变量类型不同导致的,而-1属于int型,故没有触发该异常。

二、简答题

1. Error和Exception的区别。

  1. Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

  2. Exception是程序本身能够处理的异常

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

  1. CheckedException: 这类异常在编译时就必须做出处理,否则无法通过编译,所有不是RuntimeException的都属于CheckedException,要么使用“try/catch”捕获异常、要么使用“throws”声明异常。
  2. RuntimeException:这类异常通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需要通过增加“逻辑处理来避免这些异常”。

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

  • 用try来执行一段程序
  • 如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它
  • 最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有可无)。
  • throw指抛出的一个具体的异常类型
  • throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。

4. throws和throw的区别。

  • throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。
  • throw指抛出的一个具体的异常类型

三、编码题

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

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

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * 接受用户输入,判断范围,抛出异常
 * @author Jeloys
 */
public class Homework1 {
	public static void main(String[] args) {
		System.out.println("请输入分数!");
		Scanner scanner = new Scanner(System.in);
		try {
			int grade = scanner.nextInt();
			if (grade < 0 || grade > 100) {
				throw new Exception("分数必须在0—100之间");
			}
		} catch (InputMismatchException e) {
			// TODO: handle exception
			System.out.println("请按照格式输入一个整数");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		} finally {
			scanner.close();
		}
	}

}

上面这个好像没按照要求写,那重写一个自定义异常类。

import java.util.Scanner;

public class Homework1 {
	public static void main(String[] args) {

		System.out.println("请输入学生的姓名和成绩,中间用空格隔开");

		Student student = new Student();
		Scanner scanner = new Scanner(System.in);
		try {
			String input = scanner.nextLine();
			//用一个数组存储姓名和分数
			String[] strArr = input.split(" ");
			String name = strArr[0];
			int grade = Integer.parseInt(strArr[1]);
			student.setName(name);
			student.setGrade(grade);

		} catch (IllegalGradeException e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			scanner.close();
			System.out.println(student.toString());
		}
	}
}

class IllegalGradeException extends Exception {
	// 默认构造器
	public IllegalGradeException() {

	}

	// 重载构造器
	public IllegalGradeException(String message) {
		super(message);
	}

}

class Student {
	private int grade;
	private String name;

	public void setGrade(int grade) throws IllegalGradeException {
		if (grade < 0 || grade > 100) {
			throw new IllegalGradeException("分数必须在0—100之间");
		}
		this.grade = grade;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [name = " + name + ", grade=" + grade + "]";
	}

}

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

import java.util.Scanner;

public class Homework2 {
	public static void main(String[] args) throws IllegalArgumentException {
		System.out.println("请输入三角形的三条边的长度,中间用空格隔开");
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		String[] inputArr = input.split(" ");
		int a = Integer.parseInt(inputArr[0]);
		int b = Integer.parseInt(inputArr[1]);
		int c = Integer.parseInt(inputArr[2]);
		isTriangle(a, b, c);
		scanner.close();
		
	}

	static void isTriangle(int a, int b, int c) throws IllegalArgumentException {
		if (a < 0 | b < 0 | c < 0) {
			throw new IllegalArgumentException("a,b,c不能构成三角形");
		} else if (a + b > c && a + c > b && b + c > a) {
			System.out.println("创建三角形成功!边长分别为:" + a + "," + b + "," + c);

		} else {
			throw new IllegalArgumentException("a,b,c不能构成三角形");
		}
	}
}

class IllegalArgumentException extends Exception {
	// 默认构造器
	public IllegalArgumentException() {
	}

	// 重载构造器
	public IllegalArgumentException(String message) {
		super(message);
	}
}

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

import java.util.Scanner;
import week4.Homework11;

public class Homework3 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int num = 0;

		System.out.print("请输入学生人数");
		num = scanner.nextInt();

		Student[] student;
		student = new Student[num];

		int total_grade = 0;
		double average_grade = 0.0;
		int grade = 0;

		for (int i = 0; i < student.length; i++) {
			try {
				System.out.print("请输入第" + (i + 1) + "位学生的分数:");
				grade = scanner.nextInt();
				Student stu = new Student();
				student[i] = stu;
				student[i].setGrade(grade);
				total_grade += grade;
			} catch (IllegalGradeException e) {
				e.printStackTrace();
				i--;
				continue;
			}
		}

		average_grade = total_grade * 1.0 / num;
		System.out.println("班级学生平均分为:" + average_grade);
		scanner.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值