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);
}
}