一、选择题
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.编译错误
二、简答题
Error和Exception的区别。
Error是程序无法处理的错误,表明系统JVM已经处于不可恢复的崩溃状态中。
Exception是程序本身能够处理的异常。
Checked异常和Runtime异常的区别。
Runtime异常包含了一大类被 0 除、数组下标越界、空指针等异常,产生频繁,如果用throw或try catch对可读性和运行效率影响较大,从而通过系统检测和处理的异常。
Checked异常为除了Runtime异常后剩下的异常,需要在编译时就进行处理,否则无法通过编译。
Java异常处理中,关键字try、catch、finally、throw、throws分别代表什么含义?
try指定了异常捕获并处理的范围。
catch代表异常捕获,捕获异常对象并作相应处理。
throw用于手动地抛出异常对象,throw后面需要一个异常对象。
throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。
throws和throw的区别。
throw用于手动地抛出异常对象,throw后面需要一个异常对象。
throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。
三、编码题
要求:使用自定义异常实现。
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();
}
}
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);
}
}
}
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;
}
}
}
}