Java异常习题.docx
《Java异常习题.docx》由会员分享,可在线阅读,更多相关《Java异常习题.docx(15页珍藏版)》请在冰豆网上搜索。
Java异常习题
java异常(习题)
KeyPoint
*异常的概念和分类
*异常的产生和传递
*异常的处理
*自定义异常
练习
1.填空
Java中所有的错误都继承自______类;在该类的子类中,
_______类表示严重的底层错误,对于这类错误一般处理的方式是___________;
_______类表示例外、异常。
2.查api,填空
异常类java.rmi.AlreadyBoundException,从分类上说,该类属于__________(已检查|
未检查)异常,从处理方式上说,对这种异常___________________;
异常类java.util.regex.PatternSyntaxException,从分类上说,该类属于_________(已检
查|未检查)异常,从处理方式上说,对这种异常__________________。
3.(异常的产生)把下面代码补充完整
packageexception;
publicclassTestThrow{
publicstaticvoidmain(Stringargs[]){
throwException(10);
}
publicstaticvoidthrowException(intn){
if(n==0){
//抛出一个NullPointerException
}else{
//抛出一个ClassCastException
//并设定详细信息为“类型转换出错”
}
}
}
4.(try-catch-finally)有如下代码:
importjava.io.*;
importjava.sql.*;
classTestException{
publicstaticvoidmain(Stringargs[]){
System.out.println("main1");
intn;
//读入n
ma(n);
System.out.println("main2");
}
publicstaticvoidma(intn){
try{
System.out.println("ma1");
mb(n);
System.out.println("ma2");
}catch(EOFExceptione){
System.out.println("CatchEOFException");
}catch(IOExceptione){
System.out.println("CatchIOException");
}catch(SQLExceptione){
System.out.println("CatchSQLException");
}catch(Exceptione){
System.out.println("CatchException");
}finally{
System.out.println("Infinally");
}
}
publicstaticvoidmb(intn)throwsException{
System.out.println("mb1");
if(n==1)
thrownewEOFException();
if(n==2)
thrownew();
if(n==3)
thrownewSQLException();
if(n==4)
thrownewNullPointerException();
System.out.println("mb2");
}
}
问:
当读入的n分别为1,2,3,4,5时,输出的结果分别是什么?
5.(自定义异常)创建两个自定义异常类MyException1和MyException2。
要求:
1)MyException1为已检查异常,MyException2为未检查异常
2)这两个异常均具有两个构造函数,一个无参,另一个带字符串参数,参数表示产生
异常的详细信息。
6.(自定义异常)在上一题的基础上,把下面代码补充完整。
publicclassTestMyException{
publicstaticvoidmain(Stringargs[]){
intn;
//读入n
try{
m(n);
}catch(MyException1ex1){
//输出ex1详细的方法调用栈信息
}catch(MyException2ex2){
//输出ex2的详细信息
//并把ex2重新抛出
}
}
publicstaticvoidm(intn){//声明抛出MyException1
if(n==1){
//抛出MyException1
//并设定其详细信息为“n==1”
}else{
//抛出MyException2
//并设定其详细信息为“n==2”
}
}
}
7.(try-catch)代码改错。
classMyException{
}
classTestException{
publicstaticvoidmain(Stringargs[]){
ma();
}
publicstaticintma(){
try{
m();
return100;
}catch(Exceptione){
System.out.println("Exception");
}catch(ArithmeticExceptione){
System.out.println("ArithmeticException");
}
}
publicstaticvoidm(){
thrownewMyException();
}
}
8.(方法覆盖)有如下代码
classSuper{
publicvoidma()throwsIOException{
}
}
interfaceIA{
voidmb();
}
classMySubextendsSuperimplementsIA{
publicvoidma()//1_________
{
}
publicvoidmb()//2_________
{
}
}
问:
在//1处,填入以下________代码可以编译通过,在//2处,填入_________代码可以编译
通过。
A.throwsjava.io.IOException
B.throwsjava.io.,java.io.EOFException
C.throwsjava.sql.SQLException
D.不能抛出任何异常。
9.*(异常处理)有如下代码
importjava.io.*;
importjava.sql.*;
publicclassTestTryCatch{
publicstaticvoidmain(Stringargs[]){
try{
ma(10);
System.out.println("NoException");
}catch(EOFExceptionex1){
System.out.println("ex1");
}catch(IOExceptionex2){
System.out.println("ex2");
}catch(SQLExceptionex3){
System.out.println("ex3");
}
}
publicstaticvoidma(intn)throwsException{
if(n==1){
thrownewIOException();
}elseif(n==2){
thrownewEOFException();
}elseif(n==3){
throwsnewSQLException();
}
}
}
选择正确答案:
A.编译不通过
B.编译通过,输出NoException
C.编译通过,输出ex1
D.编译通过,输出ex2
E.编译通过,输出ex3
10.*(try-catch,局部变量)有如下代码
publicclassTestTryCatch{
publicstaticvoidmain(Stringargs[]){
System.out.println(ma());
}
publicstaticintma(){
intn;
try{
n=10/0;
}catch(Exceptione){
}
returnn;
}
}
选择正确答案:
A.编译不通过
B.编译通过,输出-1
C.编译通过,输出0
11.*(try-catch-finally)有如下代码
publicclassTestFinally{
publicstaticvoidmain(Stringargs[]){
System.out.println(ma());
}
publicstaticintma(){
intb=0;
//读入b
try{
intn=100;
returnn/b;
}catch(Exceptione){
return10;
}finally{
return100;
}
}
}
在ma中,当读入的b为100时,输出结果为____,当读入的b为0时,输出结果为
_____。
12.*(try-finally)写出下面代码运行的结果
publicclassTestTryFinally{
publicstaticvoidmain(Stringargs[]){
try{
ma();
}catch(Exceptionex1){
}
}
publicstaticvoidma()throwsException{
intn=10;
intb;
//读入一个整数b
try{
System.out.println("ma1");
intresult=n/b;
System.out.println("ma2"+result);
}finally{
System.out.println("InFinally");
}
}
}
在ma中,读入整数b,如果读入的值为10,则输出:
如果读入的值为0,则输出:
13.*(方法覆盖)
classMySuper{
publicvoidm()throwsIOException{
}
}
classMySubextendsMySuper{
publicvoidm()throwsEOFException{
}
}
classMySub2extendsMySub{
publicvoidm()throws{
}
}
以上代码是否能编译通过?
如果不能,应该如何修改?
14.*(自定义异常)完成某个计费系统的用户登录和注册模块,要求如下:
1)创建一个User类,包括:
用户登录名(username)、密码(password)、用户真实姓
名(name)、电子邮件地址(email)属性和相应的构造方法及set/get方法。
2)创建两个自定义异常类,一个LoginException,表示登录异常。
一个RegisterException,
表示注册异常。
自定义的两个异常,都要求有一个接受字符串类型参数的构造方法。
3)创建一个UserBiz接口,该接口中定义两个方法:
voidregister(Stringusername,Stringpassword,Stringpassword2,
Stringname,Stringemail)throwsRegisterException//用户注册
voidlogin(Stringusername,Stringpassword)throwsLoginException//用户登录
其中register方法接受两个password参数,原因是:
在用户注册时,需要输入两遍
password,只有两次输入的password一致,才允许注册。
4)创建UserBiz接口的实现类。
其中
为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息。
Map
的键为用户登录名,值为登录名对应的User对象。
初始情况下,Map中保存的对
象为以下两个:
用户名密码真实姓名电子邮件
//adminadminAdministrator
//tomcattomcat
register方法在以下两种情况下抛出异常:
1)username在Map中已存在
2)两次输入的password不一致
login方法在以下两种情况下抛出异常:
1)username不存在
2)username和password不匹配
5)创建一个UserView接口,该接口中定义两个方法:
voidlogin();
voidregister();
6)创建UserView接口的实现类。
该实现类的login方法中,利用命令行,让用户输入用户名和密码,之后调用UserBiz
中的login方法。
部分代码如下:
voidlogin(){
System.out.println(“请输入用户名:
”);
Stringusername=;
System.out.println(“请输入密码”);
Stringpassword=;
//调用UserBiz中的login方法
}
该类的register方法采用类似的方法,让用户输入注册时需要的信息,然后调用
UserBiz中的register方法。
注意:
1、密码应该让用户输入两遍。
2、UserViewImpl中应当有一个UserBiz类型的属性
7)编写测试代码。
类图如下:
15.**(异常的捕获和抛出)有以下代码:
importjava.io.*;
importjava.sql.*;
publicclassTestMyException{
publicstaticvoidmain(Stringargs[]){
try{
System.out.println("main1");
ma();
System.out.println("main2");
}catch(Exceptione){
System.out.println("CatchExceptioninmain");
System.out.println(e.getMessage());
}
}
publicstaticvoidma()throwsIOException{
try{
System.out.println("ma1");
mb();
System.out.println("ma2");
}catch(SQLExceptione){
System.out.println("CatchSQLExceptioninma");
thrownewIOException(e.getMessage());
}catch(Exceptione){
System.out.println("CatchExceptioninma");
System.out.println(e.getMessage());
}
}
publicstaticvoidmb()throwsSQLException{
thrownewSQLException("sqlexceptioninmb");
}
}
问:
该程序输出结果是什么?
16.**(异常的捕获和抛出)有以下代码
publicclassTestException{
publicstaticvoidmain(Stringargs[]){
try{
System.out.println("main1");
ma();
System.out.println("main2");
}catch(Exceptione){
System.out.println("InCatch");
}
}
publicstaticvoidma(){
System.out.println("ma1");
thrownewNullPointerException();
System.out.println("ma2");
}
}
选择正确答案:
A.编译出错
B.编译正常,输出main1ma1InCatch
C.编译正常,运行时出错
17.**(异常的捕获和抛出)有如下代码
classTestException{
publicstaticvoidmain(Stringargs[]){
try{
ma();
}
catch(Exceptione){
}
}
publicstaticvoidma()throwsIOException{
}
}
下面哪些代码放在处可以编译通过?
A.catch(NullPointerExceptionnpe){}
B.catch(IOExceptionioe){}
C.catch(SQLExceptionsqle){}