单选题
关于Java中异常的叙述,正确的是:(C)。
A.异常是程序编写过程中代码的语法错误
B.异常是程序编写过程中代码的逻辑错误
C.异常出现后程序的运行马上中止
D.异常是可以捕获和处理的
以下对异常的描述不正确的有 ©
A.异常分为Error和Exception
B.Throwable是所有异常类的父类
C.Exception是所有异常类父类
D.Exception包括RuntimeException和RuntimeException之外的异常
Java异常类(Exception)是(D)的子类。(D)
A.RuntimeException
B.Exception
C.Error
D.Throwable
在异常处理时,将可能发生异常的代码放在(B)语句块中,后面紧跟着一个或多个(B)语句块,还可以再跟零个或一个(B)语句块。 (B)
A.catch、try、finally
B.try、catch、finally
C.try、finally、exception
D.exception、try、finally
关于try语句对应的多个catch子句中,若捕获的异常类型有父子类关系时,它们的排列下列哪种是正确的(B) 。 (B)
A.异常父类在先,异常子类在后
B.异常子类在先,异常父类在后
C.有继承关系的异常不能同时出现在同一个try程序段之后
D.先后顺序无所谓
在异常处理中,如释放资源、关闭文件、关闭数据库等由(C)来完成。©
A.try子句
B.catch子句
C.finally子句
D.throw子句
假设方法unsafe() 将抛出IOException, 可以填入如下代码段第1行的选项是(D)。(D)
{ if(unsafe()){//do something…}
else if(safe()){//do the other…}
}
A.public IOException methodName()
B.public void methodName()
C.public void methodName() throw IOException
D.public void methodName() throws IOException
对以下程序进行编译、运行结果是 ©
abstract class MineBase {
abstract void amethod();
static int i;
}
public class Mine extends MineBase{
public static void main(String argv[]){
int[] ar = new int[5];
for(i = 0;i < ar.length;i++)
System.out.println(ar[i]);
}
}
A.打印5个0。
B.编译出错,数组ar[]必须初始化。
C.编译出错。
D.出现IndexOutOfBoundes的异常
程序异常
public class Test {
public static void main(String[] args) {
try {
String s = "5.6";
Integer.parseInt(s); // 引起一个 NumberFormatException异常
int i = 0;
int y = 2 / i;
}
catch (Exception ex) {
System.out.println("NumberFormatException");
}
catch (RuntimeException ex) {
System.out.println("RuntimeException");
}
}
}
该程序会出现(D)
A.程序显示NumberFormatException。
B.程序显示RuntimeException。
C.程序显示NumberFormatExceptio,然后是RuntimeException。
D.程序编译错误。
下列程序的运行结果是(B)。
public class Test {
public static void main(String[] args) {
try {
System.out.println("Welcome to Java");
int i = 0;
int y = 2 / i;
System.out.println("Welcome to HTML");
}
finally {
System.out.println("The finally clause is executed");
}
}
}
A.Welcome to Java, 然后是错误信息
B.Welcome to Java,下一行是 The finally clause is executed , 然后是错误信息.
C.替换为正确项
D.替换为错误项
Java中用来抛出异常的关键字是:(C)。©
A.try
B.catch
C.throw和throws
D.finally
填空题
请写出以下程序运行结果:
public class Main {
public static void main(String[] args) {
String s = "hello";
try {
s = s+" world";
s.toUpperCase();
String[] a = s.split("o");
System.out.println(a.length);
} catch (Exception e) {
System.out.print(s);
} finally {
System.out.print(s);
}}}
结果:
3
hello world
程序填空题
异常抛出与捕获案例–下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。
下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。
class Main {
static void procedure() throws IllegalAccessException {
System.out.println("inside procedure");
throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
try {
procedure();
} catch (IllegalAccessException e) {
System.out.println("捕获:" + e);
}
}
}
编程题
7-1 设计一个Tiangle异常类
创建一个IllegalTriangleException类,处理三角形的三边,任意两边之和小于等于第三边,则显示三条边不符合要求。
然后设计一个有三条边的Triangle的类。如果三条边不符合要求,则抛出一个IllegalTriangleException异常。
三角形的构造方法如下:
public Triangle(double side1, double side2, double side3)
throws IllegalTriangleException {
//实现
}
一个名为toString()的方法返回这个三角形的字符串描述。
toString()方法的实现如下所示:
return "Triangle [side1=" + side1 + ", side2=" + side2 + ", side3=" + side3 + "]";
编写一个测试程序如下,用户输入三角形的三条边,然后显示相应信息。
提交时,将此测试程序附在后面一起提交。
测试程序:
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double s1 = input.nextDouble();
double s2 = input.nextDouble();
double s3 = input.nextDouble();
try {
Triangle t = new Triangle(s1,s2,s3);
System.out.println(t);
}
catch (IllegalTriangleException ex) {
System.out.println(ex.getMessage());
}
}
}
输入格式:
输入三条边
输出格式:
如果三条边正确,则输出toString()的信息,否则,输出IllegalTriangleException: 非法的边长
例如,输入1 1 1,则输出Triangle [side1=1.0, side2=1.0, side3=1.0]
若输入 1 2 3,则输出Invalid: 1.0,2.0,3.0
输入样例:
在这里给出一组输入。例如:
1 2 3
输出样例:
在这里给出相应的输出。例如:
Invalid: 1.0,2.0,3.0
结果:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double s1 = input.nextDouble();
double s2 = input.nextDouble();
double s3 = input.nextDouble();
try {
Triangle t = new Triangle(s1,s2,s3);
System.out.println(t);
}catch (IllegalTriangleException ex) {
System.out.println(ex.getMessage());
}
}
}
class IllegalTriangleException extends Exception{
private double side1;
private double side2;
private double side3;
public IllegalTriangleException(double side1, double side2, double side3) {
super("Invalid: "+side1+","+side2+","+side3);//message是父类成员变量,使用super向上传参!
this.side1=side1;
this.side2=side2;
this.side3=side3;
}
}
class Triangle{
private double side1;
private double side2;
private double side3;
public Triangle(double side1, double side2, double side3) throws IllegalTriangleException{
if((side1+side2)>side3&(side1+side3)>side2&(side2+side3)>side1) {
this.side1=side1;
this.side2=side2;
this.side3=side3;
} else {
throw new IllegalTriangleException(side1,side2,side3);
}
}
@Override
public String toString(){
return "Triangle ["+"side1="+this.side1+", side2="+this.side2+", side3="+this.side3+"]";
}
}
/*这段代码是一个Java程序,用于判断输入的三个数值能否构成一个三角形。
如果能构成三角形,则输出三角形的边长;
如果不能构成三角形,
则抛出一个自定义的异常类IllegalTriangleException,
并输出异常信息。
IllegalTriangleException继承自Exception类,
用于表示非法的三角形。
Triangle类表示三角形,
包含三个边长的属性和一个判断是否合法的构造函数。
在Triangle类中重写了toString方法,
以便在输出对象时能够以可读的方式显示三角形的边长。*/
运行结果: