Day13## 实验题
异常处理练习题
一、选择题
1.java中用来抛出异常的关键字是 C
A、try B、catch C、throw
D、finally
2.()类是所有异常类的父类。 C
A、Throwable B、Error C、Exception
D、AWTError
3.下列程序的执行,说法正确的是 D
class ExMulti
{
static void procedure()
{
try
{
int c[]={1};
c[42]=99;
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(“数组超越界限异常:”+e);
}
}
public static void main(String
args[])
{
try
{
procedure();
int a=args.length;
int b=42/a;
System.out.println(“b=”+b);
}
catch(ArithmeticException e)
{
System.out.println(“除0异常:”+e);
}
}
}
A、程序只输出第12行的异常信息
B、程序只输出第26行的异常信息
C、程序将不输出异常信息
D、程序将输出第12行和第26行的异常信息//没有进行赋值所以长度为零
4.下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。
class TrowsDemo
{
static void procedure() throws
IllegalAccessExcepton
{
System.out.println(“inside
procedure”);
throw_new___IllegalAccessException(“demo”);
}
public static void main(String args[])
{
try
{
procedure();
}
Catch(IllegalAccessExcepton e)___
{
System.out.println(“捕获:”+e);
}
}
5.对于catch子句的排列,下列哪种是正确的( B )
A、父类在先,子类在后
B、子类在先,父类在后
C、有继承关系的异常不能在同一个try程序段内
D、先有子类,其他如何排列都无关
6.在异常处理中,如释放资源、关闭文件、关闭数据库等由???( C )来完成。
A、try子句 B、catch子句
C、finally子句 D、throw子句
7.当方法遇到异常又不知如何处理时,下列哪种说法是正确的( B )
A、捕获异常 B、抛出异常
C、声明异常 D、嵌套异常
8.哪个关键字可以抛出异常? C
A、transient B、 finally C、 throw D、 static
二、填空题
1、catch子句都带一个参数,该参数是某个异常的类及其变量名,catch用该参数去与__该异常类___对象的类进行匹配。
2、捕获异常要求在程序的方法中预先声明,在调用方法时用try-catch-_ finally_____语句捕获并处理。
3、java语言认为那些可预料和不可预料的出错称为__异常_______
4、java语言的类库中提供了一个____Exception______类,所有的异常都必须是它的实例或它子类的实例。
5、Throwable类有两个子类:__Error_____类和Exception类。
6、对程序语言而言,一般有编译错误和____运行_____错误两类。
三、判断题
-
(错
) 程序中抛出异常时(throw …),只能抛出自己定义的异常对象。 -
(对 ) 一个异常处理中 finally语句块只能有一个或者可以没有。
3.(对 )异常类对象代表当前出现的一个具体异常。
4.(对 )java语言中的所有异常类都是java.lang.Throwable的子类。
5.(错 ) 如果异常发生时,没有捕获异常的代码,程序会正常执行。
四、编程题
1、
自己动手编写一个数组越界的异常。
编译时不会产生错误,运行时出现错误信息:
class ExMulti
{
static void procedure()
{
try{
int c[]={1};
c[42]=99;
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println(“数组超越界限异常:”+e);
}
}
}
2、
在练习1的基础上,修改代码,实现如果抛出异常,就输出index out of bound!
注意:不写catch而直接写finally也能实现。
class ExMulti
{
static void procedure()
{
try{
int c[]={1};
c[42]=99;
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println(“index out of bound!”+e);
}
}
}
3、
在练习2的基础上,在catch语句里实现输出异常信息。
蓝色部分均可以实现。
4、
编写代码,做运算a/b,再执行a/b前首先判断b是不是等于零。如果b等于零,抛出数学异常。
5、
编写代码,再main()方法中调用类CCircle中的方法,计算圆的面积。并且自己定义一个异常类,如果半径为负值,抛出自己定义的异常。(在类CCircle中判断并抛出异常)
6、
从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。
7、
3.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。
8、
自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常
9、
编写如下异常类:
空异常,年龄低异常,年龄高异常,工资低异常,工资高异常,身份证非法异常(自定义异常)。
编写一个员工类,
(1) 有属性:
编号,姓名,年龄,工资,身份证号码,员工人数,员工工资总额
(2) 有构造器:
构造器1:设置编号,年龄,姓名;如果年龄小于18,抛出年龄低异常;如果年龄大于60抛出年龄高异常,如果姓名为null或为空字符串,抛出空异常。
构造器2:设置工资,设置身份证号码;如果工资低于600,抛出工资低异常。
(3) 有方法
增加工资 addSalary(double addSalary),抛出工资高异常,当增加后的工资大于员工工资总额时,抛出此异常。
减少工资 minusSalary(double
minusSalary), 抛出工资低异常,当减少后的工资低于政府最低工资时,抛出工资低异常。
显示员工工资总额方法:showTotalSalary(), 抛出空异常,当工资总额为0时,抛出此异常。
显示员工人数:void showTotalEmployee(),抛出空异常。当员工人数为0时,抛出此异常。
编写Main主测试类:Test
分别生成3个员工,测试构造方法的异常抛出。
每个员工分别增加,减少工资,测试方法的异常。
显示员工的人数和工资总额。